Refrenced Libraries ------------------- icon_resource.dll libmgraphics2d4.dll libmmenu20.dll snarl_extensions.tlb style_engine.tlb melon.tlb r4base.tlb misc2_resource.dll msscript.ocx *msxml3.dll *olelib.tlb storage_kit.dll web_resource.dll * Not used by Snarl, possibly used by other addons To Do ----- - Had to stop old menu from working - needs recoding to use BMenu - Take notice of new "ignore_no_log" global setting. - Add "Make non-interactive" to notification menu. [DONE] - New "scheduled" argument for [Notify] [DONE] - Application registration updates - replace/update/merge-uid [DONE] - notificationroster.close, setattribute - notificationroster.hide / wasmissed - notificationroster.addtohistory / closemultiple - tnotification.replay / settitle / settext / set... To Note ------- From V46 onwards, merged notifications do not get a CRLF inserted between the old and new text. New style flag S_STYLE_NO_RULE_PREFIX allows for cosmetic changes to how rules which use the style are displayed (specifically the "Send to" or "Display with" prefix is not added). Style engines can now supply style names using "<Name>'='<Action>" in style_info->Name. If <Action> is supplied, this is used in any rules which use the style as its action. This allows for more descriptive rules while not breaking any backwards compatability. A style's action is displayed in the style's information page, but only if one is supplied. Extensions can now support BHandler if they want to act as destinations for "Tell", however this is all under heavy development. New "source" argument for [Notify] can be used to describe the application sending the notification Milestones ---------- M01 - Remove dependency on Prefs Kit High Completed 22 Dec 2014 M02 - Implement web-based admin console High Completed M03 - Remove dependency on storage kit Medium Not started M04 - Remove dependency on openmenu.library Medium Completed 1 Dec 2014 M05 - Tray icon and any settings request opens console High Completed 1 Dec 2014 M06 - Remove dependency on nitro.library Medium Completed 4 Jan 2015 M07 - Implement new transport model High Completed 17 Nov 2014 M08 - Implement new forwarding model High Completed 18 Nov 2014 M09 - Properly support GNTP Medium On track M10 - Define SNP 4.0 Low On track M11 - Allow sending of remote quit signals Low Not started M12 - Allow sending of remote about requests Low Not started M13 - Define rule model High Completed 8 Nov 2014 M14 - Implement display/redirect-based rules High Completed 12 Nov 2014 M15 - Implement content augmentation rules Medium On track M16 - Replicate basic event settings in admin console High Completed 8 Nov 2014 M17 - Replicate content injection in admin console High Not started M18 - Replicate extension functionality in console High Completed 23 Nov 2014 M19 - Replicate style engine functionality in console High Completed 23 Nov 2014 M20 - Replicate display/redirect functionality High Completed 22 Nov 2014 M21 - Implement new subscription model High Completed 22 Nov 2014 M22 - Replicate subscriber functionality High Not started M23 - Rework Prowl redirect to be web-based High Completed 18 Dec 2014 M24 - Rework NMA redirect to be web-based Medium Not started M25 - Rework Toasty redirect to be web-based Low Not started M26 - Rework Prowl redirect to support schemes High Completed 18 Dec 2014 M27 - Rework NMA redirect to support schemes Medium Not started M28 - Rework Toasty redirect to support schemes Low Not started M29 - Rework Clock+ extension to support crontab High On track M30 - Rework Clock+ extension to be web based High Completed 23 Dec 2014 M31 - Replace T_NOTIFICATION_INFO struct with object High Completed 5 Jan 2015 Snarl Change Log ---------------- - Released as Beta 3. (46.24) - Added content matching capability to rules. (46.24) - Behind-the-scenes rule configuration changed. Each rule has its own configuration file in etc/rules/ now. (46.24) - Rule destination selection page layout improved slightly. (46.24) - Default style now has a setting to enable/disable shading (also toggles etched and plain separator). (46.24) - RunFile style settings now has a combo for the "type" parameter. (46.24) - Schemes weren't refreshed when selecting a new rule destination. Now fixed. (46.24) - [Notify] command now supports "nocachedicon". If this is set to "1" and a URL-based icon is supplied, Snarl will always download the icon, irrespective of whether it's in the cache or not. (46.23) - Notification Forward menu now only lists those Forwards which are connected. (46.23) - Split Applications web console page into applications and computers. (46.23) - Quite a change to the way forwarded notifications are handled. As of R4.0, Snarl ignores any registration commands included in an SNP 3.0 forward and instead registers the sending computer as an application. Subsequent forwards use this same registration. (46.23) - Added Missed page to web console. (46.23) - Do Not Disturb mode is now honoured. As before, notifications with a priority of 1 (High) or higher will still be displayed. (46.23) - Re-implemented history and added History page to web console. (46.23) - Display preview image is now saved to APPDATA rather than PROGRAMFILES as the latter doesn't work reliably under Windows 7. (46.23) - Can now snooze notifications from the notification system menu. Notifications are snoozed for 5 minutes and are then redisplayed. Snoozed notifications are given a new flag (SNARL_NOTIFICATION_WAS_SNOOZED) which causes a new HUD icon to be displayed. The sending application is sent a SNARL_NOTIFY_SNOOZED when the notification is snoozed. (46.21) - Notification HUD now displays the sender IP address for forwarded notifications. (46.21) - Forwarding via SNP 3.0 no longer sends an application registration as this causes more complexity when handling the incoming notification. Instead, Grampf will catch it and display it as an unregistered remote notification. (46.21) - Global setting "show_timestamp" is now "1" by default. (46.21) - Snarl now registers a second application ("Grampf") which is used to handle unsolicited notifications. That is, those from applications which have not registered. (46.21) - Improved icon layout in Applications page, per-application page, and per-extension page. (46.21) - Forwarders wouldn't auto-reconnect after being connected, then being disconnected. Now fixed. (46.21) - Released as R4.0 Beta 2. (46.20) - Unnamed subscriptions couldn't be selected in the Network page. Now fixed. (46.20) - Add subscription link was broken. Now fixed. (46.20) - Added configuration setting "allow_admin_server_on_all". If "1" will bind the HTTP admin server to all local interfaces; otherwise just to localhost. (46.20) - Major milestone: dependence on T_NOTIFICATION_INFO struct now removed. (46.20) - If a notification has a priority of 2 or higher and no icon is supplied, the new !system- urgent icon is used. (46.20) - Default display now supports different colours for each priority. (46.20) - Major milestone: dependence on Nitro and exec.library now removed. Early startup now checks for the remaining required libraries, resources and kits in a more robust way. (46.20) - Startup-sequence processing removed. (46.20) - When a remote socket closes any applications registered by it are automatically unregistered if their keep-alive flag is not set. (46.20) - T_SNARL_APP structure now made private and enclosed within TApp. Lots of other application registration functions improved and/or tidied. (46.20) - Drag/drop facility removed from the About Snarl window. (46.20) - Notification forwarding now implemented. (46.20) - Major milestone: redirection now relies solely on the new TNotification2 object introduced in Beta 1. (46.20) - Could attempt to edit default rule via web admin. Now blocked. (46.20) - Default style if no config is now the internal (i.e. "Default") style. (46.20) - In some cases, Snarl would think it had an admin file when it didn't; now fixed. (46.20) - Redirect submenu would sometimes show blank scheme entries. Now fixed. (46.20) - Redirection was broken in Beta 1. Now fixed. (46.20) - Released as R4.0 Beta 1. (46.19) - Notifications with a priority > 1 are now forced sticky. (46.19) - Created new TNotification2 object which will replace T_NOTIFICATION_INFO. (46.19) - Styles can now supply a friendly name in style_info->Name by setting it to "Name= FriendlyName". This allows styles to retain the same internal name but to supply a more meaningful one which is display in the rule action part. (46.19) - Styles can now supply a new flag S_STYLE_NO_RULE_PREFIX which just means, instead of prefixing a rule with "Display with" or "Send to", Snarl simply displays the scheme name. This is purely cosmetic but improves the readability of certain styles for example "Send to {Run File :: Blink Red}" becomes simply "{Blink Red}". (46.19) - Milestone achieved. No longer requires openmenulite.library. (46.15) - Milestone achieved. Tray icon/Settings... now launches web admin interface. (46.15) - Droid style now works with fonts which don't have a regular typeface. - Now R4.0. (46.2) - Released as 3.1 Beta 3. (45.25) - Minor restructuring of the Event prefs sub pages. (45.23) - Fixed copyright. (45.22) - Added "FORWARD" identifier to SNP 3.0 header and incoming FORWARD packets are now given the SN_NF_FORWARD flag. (45.21) - Fixed two bugs which were causing issues with notification forwarding when using SNP 3.0. (45.19) - Released as 3.1 Beta 2. (45.18) - Registered extensions are now included in the Snarl Apps menu. Selecting an entry from the menu will cause the extension's settings panel (if it has one) to be displayed. (45.17) - Notify command now accepts "event" arument in place of "class". (45.17) - Added "events-add", "events-del" and "events-clear" commands. (45.17) - Snarl now always writes to snarl_log.txt; the setting simply indicates whether that's all it does. (45.17) - Display preview image is now created in %TEMP%\snarl.style.<name>.<scheme>.prvw. (45.16) - Application Roster now provides a global DefaultAppIcon() and BannedAppIcon() rather than loading them each time. (45.15) - Several icons are now passed as objects to Prefs Kit rather than by filename. (45.14) - Notification actions button moved to bottom right corner. (45.12) - Notification callback button text changed. (45.11) - Action menu icons are now cached at startup. (45.11) - Notification HUD layout cosmetic improvements. (45.9) - Cosmetic tweaks to some HUD content. (45.3) - Now using menu.library 2.0 to create the tray menu. This means we can have icons in menus again and, finally, have proper Missed Notifications and Snarl Apps sub- menus. (45.2) - Bumped to V45. (45.1) - Now Release 3.1. (44.93) - Added non-UI "feedback_on_mouseover" setting. If set to "1" will slightly darken non-click-through notifications while the mouse pointer is over them. (44.92) - Updated copyright information. (44.89) - Notifications->Layout->Drop Shadow slider now correctly configures itself when the panel is opened. (44.89) - Fixed bug which would crash Snarl if a drop shadow size of zero was selected. (44.89) - Released as 3.0.1. (44.88) - Manually revised version to show included missing libmmenu2.0 in installer. (44.88) - Released as 3.0. (44.87) - Moved Presence Overrides, Content Customisation and Redaction settings into sub-panel which can be accessed from the Event->[Advanced] page. (44.82) - Now sends a SNARL_CALLBACK_CLOSED signal when notifications are closed using either the "Close All" or "Close All from <App>" menu options. (44.79) - Revised default style. (44.78) - Bug identified in uLoadICO() which possibly (but not definitively) causes a crash when loading a 128x128x32 icon. Code has been put in place to abort the load if either the width or height of the retrieved icon is greater than 127 pixels. 'no_icon.png' is used instead. (44.67) - Revised per-event redirection back to being on a per-event basis. (44.58) - Redirects no longer appear in [Gateway] page. (44.58) - Released as 3.0 Beta 2. (44.56) - Fixed bug which was causing the wrong NOTIFY signal to be sent back via the Win32 transport. (44.56) - Added full API request functionality to the JSON handler and updated Snarl.js accordingly. To access the new functionality, use the following syntax: {"action":2,"payload":<<REQ>>}, where <<REQ>> is the unabridged Snarl API request. To use the new functionality from the .js file, use Snarl.dorequest(<<REQ>>). (44.55) - Fixed icon parsing issue with GNTP applications which use a resource identifier for their application icon. (44.55) - Renamed and released as R3.0 Beta 1. (44.54) - Class list in the Class Configuration panel wasn't updating when classes for the selected application were changed. Now fixed. (44.54) - New panel icons. (44.53) - Reworked Prefs panel content. (44.53) - Reworked Class Configuration panel sub tab layout. (44.53) - Released as 2.6 Alpha 4. (44.52) - Reinstated sending a SNARL_NOTIFY_INVOKED even when no dynamic callback provided to ensure backward compatability is maintained. (44.52) - Can now provide "log=0" in arguments passed to <AddClass> to prevent any notifications generated using the class from being logged. (44.51) - "Use Same Settings For All Classes?" toggle button wasn't setting itself correctly when the classes panel opened. Now fixed. (44.51) - GNTP handler now supports two custom headers: "X-Response-Redacted: <bool>" which, if True, excludes details about the machine and software versions in use from the response; "X-Notification-Duration: <secs>" which indicates the number of seconds the notification should be displayed for. Credit to Viscount for suggesting these. (44.51) - SNP2 response handler now returns human readable status code in capitals. Credit to Viscount for identifying the bug. (44.51) - App-Cache folder moved under %APPDATA% (thanks to Dithersky for suggesting this). (44.49) - Fixed crash that would happen under certain circumstances when processing a remotely downloaded image file. (44.49) - Can now stop failed extensions using the UI. (44.45) - Addressed a number of serious memory leaks to do with passing icons to the Prefs Kit by filename rather than by an exising object. Credit to Pako for taking the time to debug this. (44.45) - Full-screen detection wasn't excluding minimised application windows which could lead to a false-positive detection under certain circumstances - now fixed. (44.43) - Removing items from the Notification Centre wasn't actually removing them from the missed list - now fixed. (44.43) - Released as 2.6 Alpha 3. (44.33) - "Redirectors" are now known simply as "Redirects". (44.33) - Correctly update all lists and combos when the available styles change. (44.33) - Changed command-line arg "-r" (request) to "-p|--parse" (parse). (44.33) - Fixed bug which was preventing redirects from being permanently removed in some situations. Credit to Pako for spotting this. (44.33) - Re-enabled support for legacy SNARL_LOAD_EXTENSION and SNARL_UNLOAD_EXTENSION commands as snarlm.exe still issues these. (44.33) - Improved support for legacy SNARL_LOAD_STYLE_ENGINE and SNARL_UNLOAD_STYLE_ENGINE commands as snarlm.exe still issues these. (44.33) - Now correctly installs zipped runnable styles (.RSZ files) if they're passed as part of a command line. (44.33) - Added "mark as read" indicator to NC items. Clicking the indicator will remove the item from the NC without replaying it. (44.31) - Can now configure extensions even if they're in a FAILED state. (44.31) - Changed lots of system notifications to use the Welcome Message / Others class. (44.31) - Growl UDP registrations now use the remote host IP address rather than the host name. (44.31) - Added extra debug output to Growl UDP packet parsing. (44.31) - Notification Centre: can now close it by clicking the "X" button in the top right corner. (44.29) - Notification Centre: double-clicking a header expands/collapses the items within it; double-clicking an item replays it and removes it from the NC. (44.29) - Notification Centre: clicking the "X" button in a header removes all the items within the header. (44.29) - Notification Centre: automatically closes when the last item is removed. (44.29) - "Quit Snarl" menu item is now at the bottom of the menu. (44.29) - Class configuration panel can now be displayed on its own (that is, without the main panel being around). This is used by the "Notification Settings..." option in the notification menu. (44.29) - Can now configure Notification Centre colours. (44.29) - Released as 2.6 Alpha 2. (44.28) - Added Notification Centre. (44.27) - Shift-clicking a notification closes all notifications; Ctrl+Shift-clicking closes only those notifications from the same app. (44.26) - The label of the default callback button can now be customised using "callback- label=foo" in the {notify} request. (44.26) - New notification model. Actions gadget is larger and appears in the top left corner. If the notification has a callback, this is now displayed as a button in the bottom right of the notification. Clicking the notification body simply closes (SNARL_EVENT_CLOSED) the notification. (44.26) - Non-interactive notifications now fade to 25% opacity and fade faster. (44.25) - Added new global "Ignore mouse and other inputs" option. (44.25) - Style and Extension configuration panels are no longer displayed modal. (44.25) - Applications can no longer be automatically banned. Instead, uCheckDOS() now counts up how many notifications the application currently has visible and drops further notifications while this number is ten or more. (44.25) - Fixed a number of bugs to do with subscriptions and forwarding via SNP. (44.25) - Released as 2.6 Alpha 1. (44.24) - New "Block further notifications" option in notificaton menu. If selected, disables the class which generated the notification. (44.24) - Added per-class setting which prevents notifications from being programmatically hidden (closed). (44.24) - Added per-class notification text redaction. (44.24) - Styles can now provide customised Close and Actions gadgets. These should be named "close.png" and "actions.png" respectively and should be located in a "gadgets" sub folder within the style's own folder. (44.24) - SNP Subscriptions implemented. (44.23) - When an extension is enabled (loaded), Snarl now checks to see if its release number has changed and displays a notification if it has. (44.21) - Added per-class background tint option which is sent to the destination style as "background-tint=<rgba32>". Note that styles must support this value for it to work. (44.14) - Can now load, unload and configure extensions using the command line. (44.10) - Bumped to V44. (44.1) - Notification scaling re-implemented (was removed a while back). (43.80) - Completely revised [Redirect] page in class configuration panel. (43.80) - New Good and Bad icons. (43.80) - Minor cosmetic changes to [Style Engines] tab content. (43.80) - Removed [AddOns]->[Displays] tab. (43.80) - Moved style engines configuration panel into new [AddOns]->[Style Engines] tab (43.80) - Draws gear wheel emblem on notification if the default callback is set. (43.80) - "Quit" button on [Applications] page now works for registrations created by extensions. (43.80) - Can now display an extension's configuration settings without the need for Snarl's GUI to be open. (43.80) - Can now launch an extension's configuration settings from the [Apps] page by selecting it as per a regular application. (43.80) - Renamed "Options..." to "Actions..." in [Missed] and [Displayed] subtabs. (43.80) - Reworked Class Configuration panel page content to make it more logical. Fundamentally, the [Behaviour] and [Advanced] pages have had their content switched and some more commonly used options have been moved into the [Appearance] page. (43.80) - Improved way command-line arguments are processed. (43.80) - Released as 2.5.1 Beta 2. (43.73) - Added "Options..." button to [Missed] and [Displayed] subtabs. (43.73) - Fixed bug which sometimes prevented the "Copy to Clipboard" menu item from working. (43.73) - Added option on [General] page to enable/disable the close notification key combo. (43.73) - Minor cosmetic changes to scheme preview notification and Snarl Apps pop-up window. (43.72) - Added an undocumented S_STYLE_REDIRECT_TO_SCREEN (0x1000) flag which a redirect style can use to indicate it generates on-screen content. Snarl doesn't generate a "A notification using <style> was created" notification for styles which implement this value. (43.72) - Minor cosmetic changes to the [Presence] sub-pages. (43.72) - Removed non-functional "Install Extension..." button from the [Extensions] page. (43.72) - Renamed "Snarl Daemons" menu entry to "Snarl Specific Apps". (43.72) - Added undocumented "away" and "back" commands to SOS. These set and clear a new SN_PF_AWAY_SOS flag which is used purely for testing the user presence code. (43.71) - Holding down 'E' while starting Snarl prevents all extensions from starting; 'D' enables debug mode and 'S' prevents startup-sequence files from being launched. Holding down either CTRL key no longer enables debug mode. (43.71) - Snarl now launches links from USERDIR/startup-sequence and ALLUSERDIR/startup- sequence on startup. These are SSL2 links which follow are standard INI file format. See the end of this document for more information. Thanks to Arioch for suggesting this. (43.71) - Reworded inaccurate text on [Extensions] page. (43.71) - Added "keep-alive" to {register} command. Default is zero. Setting to "1" ensures the application is not removed during garbage collection if the creator has disappeared (useful for scripts and command prompt-launched stuff). (43.71) - Snarl now runs a garbage collection every 10 seconds looking for applications whose process is no longer running. Any orphans are then gracefully unregistered. (43.71) - Now looks in user folder for style engine links *after* loading links from INSTDIR\styles. (43.71) - Released as 2.5.1 Beta 1. (43.65) - New "sensitivity" argument added to {notify} command. Defined values are as follows: 0 - Normal; 16 - Personal; 32 - Private; 48 - Confidential. Note that Snarl simply passes the value on. (43.62) - Removed the "include_host_name_when_forwarding" option. Styles now need to include the computer name themselves. (43.62) - Can now send "recipient=/S" in {notify} request. Snarl will compare the value against the logged-on user's username and will discard any which don't match. (43.61) - Double-clicking the tray icon when there are missed notifications now opens the missed notifications panel. (43.60) - Fixed bug which caused all notification classes to default to "log always". (43.60) - Extensions and style engines are now stored (and loaded from) INSTDIR/extensions/ and INSTDIR/styles/ respectively. (43.59) - User-specific data folders are now created during start-up. (43.58) - Applications which register via TCP/IP on the local computer no longer get treated as remote applications. Specifically: there's no "... on <ip>" text and the registration notification say "Application registered". (43.57) - Fixed bug which broke SNP2. Credit to the G+ Notifier guys for spotting this. (43.55) - Added new "BlockUnknownApps" admin setting. If this is enabled ("1"), only applications which have existing .class files will be allowed to register with Snarl. (43.53) - Fixed a bug introduced in R2.4.2 which meant that if no notification title or text is supplied for {notify} you'll always receive an ERROR_ARG_MISSING, even if the notification class has a default title or text. Credit to Pako for spotting this. (43.53) - Changed the way missed notifications are counted. (43.52) - Extension icon loader now uses same code as notification icon loader. (43.52) - Better parsing of icon paths so filenames which contain commas should no longer be misunderstood as resource indicies. Credit to Toke for this. (43.52) - System info notification now displays local IP addresses and screen resolution. (43.52) - Fixed bug which caused the class default sound to play even if a notification provided its own specific sound. Credit to Pako for spotting this. (43.52) - Released as Snarl 2.5. (43.51) - Released as Snarl 2.5 Beta 3. (43.51) - Released as Snarl 2.5 Beta 2. (43.50) - Fixed bug to do with class default timeout. Credit to Pako for this. (43.50) - Fixed bug which caused notification_info->title to be empty if S_STYLE_IS_ WINDOWLESS is specified but neither of S_STYLE_V42_CONTENT nor S_STYLE_WANT_ APP_NAME are and "Include host name when forwarding" is disabled. Credit to Pako for spotting this. (43.35) - Style Engines can now support their own configuration interfaces. To do this, the style engine should respond to a call to IStyleEngine.StyleAt() where the index provided is zero by setting style_info->flags to S_STYLE_IS_CONFIGURABLE. Snarl will then call IStyleEngine.GetConfigWindow() with StyleName set to ".global". At this time, the engine should provide its own UI and return zero. Returning a non-zero value is not permitted and will break in future releases of Snarl. (43.34) - "Remove Selected" in the missed/history lists now correctly removes the selected items. (43.34) - External apps can now query Snarl's state using the new snGetSystemFlags() API. This currently returns the debug state, user away state and user busy state in the new SNARL_SYSTEM_FLAGS enum. (43.33) - Snarl now notifies on style drag-drop. (43.32) - Notification details menu now includes the source computer in the application name. (43.32) - Improvements to forwarding code. (43.32) - "Log to history" is now a 3-state control with the ability for the app to suggest what should be done if the user allows it. The app can do this by supplying "log=0" within the <notify> command to prevent the notification from being logged, otherwise it gets logged. (43.31) - Snarl no longer creates an empty file when an invalid icon path is provided. (43.31) - Notifications can now be replayed even while DnD mode is enabled. (43.31) - Changed "Missed Notifications..." menu item to a menu parent which will open a submenu of (at most) the last 10 missed notifications. Selecting an entry from the menu will reply the notification. (43.31) - Added GNTP flash policy support. (43.30) - Added "Restory Factory Settings" button to [Advanced] page (suggested by Shawn) which currently renames "config41.snarl", "styledefaults.conf" and anything with the extension of ".class" to "xxx.backup", launches the new DelayLoad app, and quits Snarl. (43.29) - Added priority background, title and text colours to default style settings. (43.21) - Pass-Thru implemented. This only applies when the user is Active (that is, when they're neither Away nor Busy). (43.21) - Moved [Pass-Thru] from [Display] into [Presence->Active]. (43.21) - Command-line parser now supports .runz and .webforward files which are copied/extracted accordingly. (43.20) - Can now drag-and-drop .runz (zipped runnable styles) and .webforward files onto the Preferences panel. Snarl will copy/extract accordingly and re-load styles. (43.20) - Added "never_ban" setting to the per-application config - if this is set to 1 the application will never be banned by Snarl. (43.20) - Improved way Missed and History lists are managed. (43.20) - History and Missed lists now limited to 1,000 items. (43.19) - NOTIFY will now register and the application if "app-sig" and "app- title" are both supplied. It will also add the required class if "class-id" and "class-name" are supplied. (43.18) - Listen for JSON and SNP/GNTP now enabled by default. (43.15) - Now listens on Port 5233 as well. (43.15) - Moved Missed Notifications into [History] page under new "Missed" tab. Suggested by Shawn. (43.14) - Added support for scripted callbacks. (43.8) - Extensions can now provide resource-based icons in extension_info-> iconpath. For this to work, the path must contain the path to the resource file, a comma, and the index of the icon to use - e.g. "shell32.dll,34". The path need not be absolute, so long as Windows can figure it out. (43.6) - Only !icons are now sent verbatim; cached icons are sent phat-encoded just like other filesystem ones. (43.2) - Content is now crafted by the subcriber roster before being passed to the individual subscribers. (43.2) - Behind-the-scenes forwarding improved significantly. (43.2) - Can now selectively enable and disable individual forwarders and subscribers via the [Network] page. (43.2) - "Has action" emblem is now drawn if the notification has a static click callback. (43.2) - Style defaults "width" is now a slider control. (43.2) - Released as R2.5 Beta 1. (43.1) - Bumped to V43. (43.1) - (42.176) - Remote applications are now determined at registration time only and an application is only considered remote if it's IP address is not one assigned to the local computer. (42.171) - SNP 2.0 notifications now include SNP_VERSION in the header. (42.171) - Priority and Sticky emblems are now drawn only on mouseover. Remote app emblem is no longer drawn. (42.171) - Notifications created by password-protected applications have the application's name in the HUD drawn in a different colour. (42.171) - Fixed bug whereby sounds provided in a <notify> request were not being played. Thanks to Danny Tuppeny for spotting this. (42.171) - SNP 2.0 requests are now treated as V42 calls. (42.171) - If a notification has a UID, the SNP 2.0 response now contains this rather than the notification's token. (42.171) - Added simplistic multi-monitor support such that the user can now select which screen notifications are displayed on. (42.169) - Cosmetic enhancements to Missed Notifications panel. (42.168) - Minor cosmetic enhancements made to [History] list content. (42.166) - Downloaded icons are now squared-up when they're saved to avoid issues when displaying them in the [History] list. (42.166) - Notification content is pre-processed to avoid confusing the Prefs Kit list box. (42.166) - Tray icon now dims when Snarl is stopped. (42.165) - Removed the Snarl Apps tray submenu and replaced it with a "Snarl Daemons" item. Selecting this causes a small selector window to open which contains all the apps that have registered as being Snarl- enabled (pre-V43) or Snarl Daemons (V43 on). Clicking anywhere other than on an item in the window causes the window to disappear; clicking on an item in the window will cause Snarl to run the selected app's configuration tool (if it has one) or to receive a SNARLAPP_ACTIVATED (V43 on) or SNARLAPP_DO_PREFS (pre-V43) notification if it has opted to receive callbacks. (42.165) - The tray icon now turns yellow when Snarl enters away mode. (42.162) - Removed "app-flags" argument from <register> and replaced it with "app- daemon". Setting this to "1" indicates the application is a daemon rather than GUI-based and thus Snarl should include it in the "Apps" tray submenu. The application should support both SNARLAPP_DO_PREFS and SNARLAPP_DO_ABOUT and *must* support the new SNARLAPP_ACTIVATED and SNARLAPP_QUIT_REQUESTED events. SNARLAPP_ACTIVATED is posted whenever the user selects the app's entry in the tray menu; SNARLAPP_QUIT_ REQUESTED is sent when the user clicks the (new) "Quit" toolbar button in the [Apps] page. Note these events are simply posted to the app; Snarl is not interested in receiving a response to them. (42.154) - Wasn't returning ERROR_NOT_RUNNING under V42 when stopped. Now fixed. Credit to JonusC for spotting this. (42.152) - Added new [History] page. (42.151) - Locally registered SNP3 applications which use the new "app-flags" parameter can now receive two new callbacks - SNARL_NOTIFY_APP_DO_ABOUT and SNARL_NOTIFY_APP_DO_PREFS - which indicate the app should display information or its configuration panel respectively. (42.150) - FindNotification() now sets lasterror to ARG_MISSING if neither a token or UID is specified. (42.150) - Improved <addaction> command stability error-checking. (42.150) - "Make sticky" menu item now properly sets the notification as sticky. (42.150) - Added "app-flags" argument to <register> command. This can be used in place of the unintuitive "flags" parameter. Current supported values are "prefs" and "about". (42.150) - Icons can now be specified using the file:// protocol. Credit to Shawn McTear for the suggestion. (42.150) - Applications can now provide "hint" when registering. This is displayed whenever the "Details..." button in [Apps] is clicked. (42.150) - Applications can now provide "config-tool" when registering. This should contain the path to an executable that will be launched by Snarl when either the "Settings..." button in [Apps] is clicked, or when the entry in the tray "Apps" sub-menu is selected. (42.150) - Improved scheme preview notification content. (42.150) - Improvements and bug fixes to the default style. (42.150) - Added new [Display/Defaults] sub page. This uses values stored in /etc/ styledefaults.conf to control the internal style ("Default"). External styles can (and *should*) also offer the user the option of using these defaults. (42.150) - When unregistering an application via the [Apps] page, Snarl will now prompt the user if they want to delete the persistent settings associated with the app. (42.150) - Notification generated by the [Apps] page "Details..." button now uses a UID to prevent multiple copies appearing. (42.150) - <Register> now supports "app-title" (preferred over "title"). Credit to Shawn McTear for the suggestion. (42.150) - Default away mode setting is now "Log As Missed". (42.150) - Low priority notification logic changed. Now each registered application can have a single low priority notification on-screen (as opposed to a single global notification). Credit to Patrick von Reth. (42.150) - Remote icons are now saved using GUIDs rather than calculated file names. They are also managed in a cache controlled by the notification roster to allow for faster access to recurring URLs. A new button - "Empty Icon Cache" - has been added to [Advanced/General] which will forcabily clear the icon cache, although the cache is emptied whenever the notification roster is closed. Credit to Sven for identifying the original bug which led to this feature. (42.150) - Bug that stopped notification content from updating when using a V42 style fixed. (42.149) - Can now assign custom actions on a class-by-class basis. (42.149) - Bug in misc.resource (and misc2.resource) BPackedData causing problems with notifications fixed temporarily (will need fixing in both resources). This showed itself in a number of GNTP applications so credit to Skip and Pieter for raising it. (42.147) - <addclass> now returns ARG_MISSING if neither a token or app-sig is provided and NOT_REGISTERED if no applications have been registered. Credit to Shawn McTeer. (42.146) - SNP3 response now includes Snarl sub-version number in "x-daemon" header whenever appropriate. (42.146) - SNP2 and SNP1 responses now include current supported SNP version. (42.146) - Bugs in SNP2 handling code fixed. Credit to Shawn McTeer. (42.146) - GNTP handling code now removes whitespace as per clarification from GNTP authors. (42.145) - Renamed "Shadowing" to "Pass-Thru" in preferences panel. (42.144) - Restored sound settings into [Behaviour] sub page. (42.144) - Created new [Pass-Thru] display sub page. (42.144) - Revised SNP3.0 response specification and added callback support. (42.137) - Support for phat64 icons added to apps, classes and notifications (create and update). (42.135) - SNP3.0 FORWARD response reworked and icon sending added. If the icon is a URL or !icon then it's simply added to the response as "icon: <url|!>"; if the icon is a path to an image then it's encoded in a slightly modified version of Base64 (CRLF's are replaced with #'s) and added to the response as "icon-phat64: <data>". We use "icon-phat64:" as the encoding used is *different* to that used in SNP2. (42.134) - Applications can now be registered without providing a signature so long as a title is specified. For reference the signature will be created with the title converted to lowercase, any spaces replaced with underscores and prefixed with "application/x-". (42.132) - Apps which are remotely registered now get "remote_app.png" as their icon if no other icon is specified. (42.131) - Added further SNP3 request parsing. (42.131) - Added placeholder SNP3 request parsing. (42.130) - API version is now correctly stored in notification info for V42 and V41 requests (it remains zero for pre-V41). It's also displayed in the notification's "Details" sub-menu. (42.130) - [Shadowing] content moved into [Behaviour]. (42.130) - [Federation] renamed to [Sounds] and sound controls moved into it. (42.130) - Can now manually block apps via the [Apps] page. (42.130) - Released as 2.4.2 DR2 (42.128) - Line overflow trimming wasn't working for V42 styles, now fixed. (42.126) - Split [Advanced] page into [General], [Security] and [Debug] tabs. [Debug] tab is only shown if debug mode is enabled. (42.126) - Debug mode is now always enabled for alpha and DR releases. (42.126) - Added "Revoke Block" button to apps page. (42.125) - Added option to prevent the default callback of a notification being set to a URL. (42.123) - Added basic DoS protection. (42.123) - Resolved memory leak caused by notifications which would end up off-screen not being properly disposed of. (42.123) - API requests which do not specify a PID in wParam are now blocked. (42.123) - Debug mode is now always enabled for beta releases. (42.122) - The 'Actions' indicator icon is now displayed if a notification has a default callback. (42.122) - Applications can now specify a URL-based application icon when registering. The icon will be initiated as an asynchronous download and will be cached in the new /etc/icons/app-cache folder. The icon is not deleted, thus subsequent registrations will pick it up. (42.122) - Added an option to automatically detect if the notification text is a URL (specifically - begins with "http(s)://") and set the default call- back to it if it does (and no default callback already specified). (42.122) - Added option to only allow password-protected applications to register. (42.122) - Fixed bug in [Display|Appearance] subpage which cause Snarl to crash when opening its preferences under certain conditions. (42.121) - Fixed a bug which meant Notifications would be shadowed twice if a remote icon was used. (42.110) - Extension exclude list wasn't being updated. Now fixed. (42.108) - Fixed bug in notification roster which meant shadowed notifications would appears twice when a remote icon was specified. (42.107) - Major improvements to Run File 2.0 style. Schemes now have a configurable name which is stored in the .runfile configuration file. The file's name is not configurable via the UI and thus provides a constant for the scheme. Type 1 schemes are now known as "simple", with type 2 and 3 schemes as "complex" and "unabridged" respectively. Type 3 schemes now utilise the template parameter which is passed prefixed to the notification content. The link to the user guide and the hint text has been moved into the new scheme management panel and schemes are now created and edited via this panel. (42.106) - Actions indicator is now drawn when actions widget is visible. (42.106) - Renamed emblem and widget icons. (42.106) - Can now select notification HUD icons via [Display] page. Dario's "Greyscale" theme is included with Snarl. (42.106) - Added new per-app "block_if_foreground" setting which will discard the notification if the appropriate setting is enabled and the application which is creating it is the foreground app. This only works for applications registered via the Win32 API. (42.106) - Added new "Applications must register before creating Notifications?" setting to [Advanced] page. (42.106) - Bumped Run File style to 2.0 and changes the way it saves the scheme info. (42.106) - Added "Hide All Notifications" main (tray) menu option. (42.106) - Added "-restart", "-unload" and "-load" command-line arguments. These respectively restart, unload and load a style or extension based on the classid (including .qualifier) of the item in question. (42.105) - Previously, if a managed style didn't provide suitable content for a notification, Snarl would not display the notification. This has now been fixed, with Snarl using the built-in style. (42.102) - Extension management significantly improved in a similar way to style engine management. (42.102) - Style engine management significantly improved. All registered style engines are now displayed in the Styles/Advanced... panel and can be enabled or disabled on an engine by engine basis. (42.102) - Now registers system keys Win+Esc and Win+Ctrl+Esc which close the most recent notification and all notifications respectively. (42.102) - Fixed bug in SNP2 socket handling code which was causing requests to be mistakenly handled as GNTP. (42.102) - Tidied up GNTP and SNP socket binding code. We now use the wildcard IP address (0.0.0.0) rather than enumerating all local addresses. (42.102) - Released as R2.4.1. (42.101) - Released as R2.4.1 b3. (42.101) - Headers beginning with "Data-" in a GNTP notification request are now stored and included in any subsequent CALLBACK response. (42.101) - Fixed bug in GNTP notification parsing code which wasn't saving embedded icons out. (42.101) - Snarl will now check for a new beta release on startup if config entry "auto_beta_update" is set to "1". There is currently no GUI setting for this, hence the config file must be edited manually. (42.101) - If no icon is provided by an application, Snarl will now attempt to use the first icon in the application's executable. This only applies to applications which register using the Win32 messaging subsystem and who provide their PID in wParam when sending the WM_COPYDATA message. (42.100) - Released as R2.4.1 b2. (42.99) - Fixed bug which was allowing multiple low-priority notifications to appear when using a password. (42.99) - !icons are now displayed correctly in the application list. (42.99) - Fixed bug in GNTP socket callback response content. (42.99) - Class configuration panel [Forwarding] page renamed to [Shadowing]. (42.99) - Implemented GNTP socket callbacks. (42.99) - Missed Notifications panel now displays !icons correctly. (42.99) - Notifications can now request a particular style by using the new "style=<style>/<scheme>" argument within <notify>. This is only a request however; it's not guaranteed to be honoured. (42.99) - Released as R2.4.1 b1. (42.98) - Further improvements to the missed notifications panel. (42.98) - GNTP notifications will now attempt to use the class icon and then application icon (in that order) if no notification icon is provided. (42.96) - GNTP handling code largely rewritten to be more robust. (42.96) - Bug associated with adding actions to a notification in the wait queue fixed. (42.89) - GrowlNet applications running locally are no longer mistakenly identified as remote apps. (42.88) - Legacy API functions are now treated as just that, and receive legacy support accordingly. At the moment this simply resolves itself as to whether the sending app is notified of right- and middle-button click events. (42.87) - Fixed a number of issues to do with notification updating when V42 styles are used. (42.86) - Added configurable option to allow legacy support of right- and middle-button clicks. (42.83) - <Notify> now supports "class" keyword to identify the class to use. "id" is still supported of course. (42.81) - GNTP applications running locally are no longer mistakenly identified as remote apps. (42.80) - Possible fix for GNTP UTF8 bug. (42.79) - Fixed a number of bugs in the GNTP icon handling code. (42.72) - SNP 1.0 error handling is now more robust. (42.67) - Missed notifications panel reworked and improved. (42.66) - Significant reworking to the notification roster. (42.66) - Right-clicking a notification now pops open the notification's context menu if no custom menu is defined. This means that the SNARL_CALLBACK_R_CLICK event, deprecated as of R2.4, is no longer sent. (42.65) - Released as R2.4. (42.62) - Snarl no longer mistakes the Windows 7 Flip (Win+TAB) window as a full screen app. (42.62) - Fixed issue with the Missed Notifications notification (sic) appearing even when no notifications had been missed. (42.61) - Added "Recreate Tray Icon" button to [Advanced] page while will ask Snarl to put its icon back into the system tray if it should disappear for some arcane reason. Note that the icon will only be created if admin and user preference settings allow it. (42.60) - Improved the way the preferences panel is displayed. (42.60) - Moved TDebugPage code into frmAbout.NewDoPrefs(). (42.60) - Fixed a number of bugs to do with string processing which would manifest if a request of more than 32767 bytes was sent to Snarl. (42.59) - Default style is now selected in the [Styles] page. (42.59) - R2.4 Beta 4. (42.58) - NotificationRoster.Update() now supports "callback", "reply-to", "reply", "icon", "icon-base64" and "uid" args for both on-screen and missed notifications. On-screen notifications can also have their duration modified via the "timeout" arg. (42.58) - NotificationRoster.Update() will now update missed notification content, if it's still in the missed list. (42.58) - Timestamp content displayed in notification during mouse-over is now relative. Values can be "Just now" (less than a minute ago), "x min(s) ago" or "x hour(s) ago". If the notification was created 24 or more hours ago, the date and time is displayed. (42.58) - If the "uid" arg is used in <Notify> and a notification with the uid is still visible or is in the missed list, then the existing notification is updated with the provided content. (42.56) - Removed support for "replace-uid", "update-uid", and "merge-uid" from <Notify> for now while the specifics of these are better developed. (42.56) - App's name is now drawn in bottom-right corner of notification while mouse pointer is over the notification. (42.56) - Added new [SetMode] request. Currently this only supports a single argument ("Busy") which can be used to set Snarl's busy (DND) mode from an external source. In order to do this, the application must be registered with Snarl and must supply its signature ("app-sig") or token ("token") and password ("password") if necessary. (42.56) - Added new SNARL_ERROR_INVALID_ARG (108) error. (42.56) - Added "trash", "mycomputer" and "nethood" actions to !system command (42.56) - Fixed bug processing embedded actions in <Notify>. (42.55) - <RemClass> and <ClearClasses> requests now accepts app-sig parameter. (42.53) - Fixed bug in TNotificationRoster.Add() whereby delayed notifications didn't have the BPackedData "Args" parameter included. (42.51) - Corrected some issues with Base64 decode routine. (42.51) - Added Base64-encoded icon support to <AddClass>. (42.51) - Added support for Base64-encoded icon data within <Notify>. Parameter name is "icon-base64" and encoded data should be terminated with percent characters, not equals signs. (42.48) - Fixed bugs around the title/app name logic in the notification forwarding code. (42.47) - Bumped back to Beta 4. (42.47) - Added option to include the computer name in the title of forwarded notifications. (42.47) - Minor layout alterations to some prefs pages. (42.46) - Fixed bug in Notification Roster to do with styles and the S_STYLE_WANT_APP_NAME flag whereby notifications would sometimes end up with the title and application name set twice. (42.43) - Added "Forward" option to the Away and Busy action buttons. (42.43) - Split presence settings out into new [Presence] page. (42.43) - Clarified wording in the snDoRequest() helper explaination. (42.43) - Split the [Appearance & Layout] sub-page into separate [Appearance] and [Layout] pages. (42.43) - Added basic style pass-through functionality although this will most likely remain private/undocumented until V43. (42.43) - Minor cosmetic changes to [General] page. (42.43) - Included missing "schemes.conf" in Smooth style folder. (42.43) - Minor cosmetic changes to [Network] page. (42.43) - DND extension folder removed. (42.43) - Default style is now Corporate/Standard. (42.43) - Copyright bumped to 2011. (42.43) - Rebranded as Beta 3. (42.42) - Slight improvement to missed notification checking logic. (42.42) - Renamed "Do Nothing" presence action to "Discard". (42.41) - Converted Run File style to V42 and added support for any notification elements prefixed with "data-" and "value-" which are passed to the target file as further arguments. (42.40) - Added support for "&&" and "==" pairs in notification elements which are translated into single "&" and "=" respectively. This is the preferred way for notifications to include "&" and "=" characters. (42.40) - Snarl Welcome Message notification class renamed to SNARL_CLASS_GENERAL and extended to cover other notifications such as the "update available" and "missed notifications" ones. (42.40) - SNARL_USER_AWAY and SNARL_USER_BACK are now sent to all registered applications when the user's presence switches to and from Away mode. (42.40) - Added [Set Away when Screensaver] option as Windows NT systems don't actually lock the computer until input is detected while the screensaver is running. (42.40) - Full-screen app detection now sets/clears DND mode rather than away mode. User-enabled DND is now a flag as well. May still re-add an API to allow external apps to set and clear DND status. (42.40) - A successful re-registration now updates the application's icon, reply- to window and reply messages if any of these are provided. (42.40) - Added priority emblem which is drawn over any high priority notifications. (42.40) - Improvements to the scheme preview code. (42.40) - Removed ununsed internal E_DEFAULT_DURATION constant. (42.40) - Merged the [General] and [Advanced] page content into the main form, doing away with the two class objects. (42.40) - Fixed a number of cosmetic bugs in the scheme preview code. (42.40) - Changes made to Away and Busy (DnD) logic. Now only the user can enable and disable Do Not Disturb mode (via the tray icon menu). Similarly, Away mode can only be set programmatically in response to certain system events. (42.40) - Removed support for private E_SET_DONOTDISTURB external API, making the DND extension redundant. (42.40) - Moved full-screen app and computer lock/unlock detection into Snarl, effectively doing away with the DND extension. (42.40) - We now use the "no_icon" icon when applications without icons register and unregister. (42.39) - Fixed a number of bugs and glitches within the notification drawing and fading code. (42.38) - Click-through notifications were grabbing the keyboard focus on mouse- over. Now fixed. (42.38) - GNTP and GrowlNet priorities are now passed through unchanged allowing V42 styles to handle different priorities. (As an aside, although the only official Snarl priorities are -1, 0 and +1, the unofficial position is that the priority should be treated as signed byte, thus allowing for priorities ranging from -128 to +127). (42.38) - Added code to handle restoring the tray icon after an Explorer crash. (42.38) - Improved distinction between sticky and away functionality. When sticky notifications are enabled, *all* notifications are sticky, regardless of priority. When away mode is enabled, only high priority notifications are made sticky. (42.38) - Re-instated idle timer and associated user-definable delay setting. This now enables away mode when the delay is reached with no user activity in between. (42.38) - Released as R2.4 DR7. (42.37) - Improved way notification forwarding is managed. Notifications may now be forwarded based on one or more of the following conditions being met: away, busy or any other time. (42.36) - Prefs icons changed to use Faenza set. (42.35) - Split class configuration [Extras] page into [Forwarding] and [Advanced] pages. (42.35) - Added emblem which identifies sticky notifications. (42.35) - Reworked the way actions are managed. Most significant advantage is that actions can now be stored (and accessed) for missed notifications. (42.35) - API return value changes mean we can no longer use the result-plus- last-error model so <IsVisible> now returns SNARL_SUCCESS if the requested notification is still on-screen and a new (V42 only) <WasMissed> action will return SNARL_SUCCESS if the notification was placed in the missed list. (42.35) - <Notify> action "replace" and "update" args renamed to "replace- uid" and "update-uid" respectively and now expect a notification UID rather than a token. (42.35) - All V42 Windows API functions now signal an error in the return value of snDoAction(). The return value can be one of three possibilities: zero (success), +ve (success and a usable number), or -ve (an error). The actual error can be determined by checking ABS(return_value) against the error list. "lasterror" is thus no longer a recognised action under V42. (42.35) - Added new "uid" argument to <Notify> which can be used to uniquely identify a notification on a per-app basis. (42.34) - Internal T_NOTIFICATION struct used by Notification Roster stream- lined. (42.34) - Private SNARL_COUNT_NOTIFICATIONS command removed. (42.34) - Can now include zero or more "action=<label>,<command>" arguments in a <Notify> request. (42.34) - Win32 action and menu dynamic callbacks now send the command (with the "@" prefix removed) cast as an Int16. (42.34) - Notification right-click menu item selection now works with SNP- generated notificatons (it is still deprecated however). (42.34) - <Register>, <Unregister>, <AddClass> and <Notify> now all use "app- sig" as the application signature argument. <Register> still accepts "id" for backwards compatibility reasons. (42.32) - <AddClass> now accepts an application signature as an alternative to an application token. Use "app=<sig>". (42.31) - Reverted the "Missed Notifications" notification back to using the default callback rather than an action to open the missed list. (42.31) - Application signature must not contain spaces (a "missing arg" error will result if it does). GrowlNet register command ammended to replace spaces with underscores. (42.30) - <Unregister> action now accepts an "id" argument which should be the signature of the application to unregister. Likewise, <Notify> now accepts an "app" argument as in lieu of an application token. (42.27) - Minor bug fixes and code tweaks. (42.26) - Notification actions must now have a command. Attempting to add an action with no command now fails. If a command begins with '@' it is sent back to the app which added it either verbatim (for SNP) or using the item index (win32). (42.23) - Refinements to notification callbacks. Right-clicking and middle- clicking are now deprecated although the Win32 API still sends the appropriate message to ensure backwards-compatibility with older applications. The "auto dismiss" flag introduced during the early V42 development phase has been removed. (42.22) - Removed V41 include. (42.22) - Added rudimentary support for some GNTP functionality (specifically application registration and notification creation. (42.22) - Removed dependency on legacy include file and moved remaining legacy constants into new "deprecated" module. These will be retained for as long as we support the 1.x API. (42.21) - New VB5/VB6 V42 include file which now uses the Mk.3 Win32 low-level transport. (42.21) - Implemented new Mk.3 low-level transport (see separate notes) and removed temporary SNARL42_PARSE command. (42.21) - Application re-registration now requires the password supplied when the application was first registered. (42.21) - About page now checks existence of the Calibri font and reverts to Tahoma. (42.21) - Rebranded "Default Ack" and "Acknowledge" to "Callback". (42.21) - Clicking the "Details" button on the Apps page will, for those apps which don't provide their own information, generate a notification with basic information about the application. (42.21) - Released as R2.4 DR6. (42.20) - Snarl now performs URL decoding on any incoming SNP2.0 and Win32 packets. Outgoing notifications (e.g. via the forwarding subsystem) are now URL-encoded as well. (42.20) - Notification forwarding completely reworked to use SNP2.0 (so, at present, forwarding to computers not running Snarl 2.4 is broken) and removed the reliance on the deprecated Snarl Network Bridge library. (42.20) - If a notification is successfully merged, LastError is now set to WAS_MERGED to indicate this. (42.20) - Updated credits. (42.20) - Added sn42Send() which takes two parameters: "Action" and "Args". "Action" is the SNP2.0 action to perform; "Args" contains SNP2.0- formatted arguments. (42.20) - Tidied up VB6 include file. (42.20) - The "secure" emblem is now only drawn on the registration notification, not subsequent notifications. (42.20) - Further work done on consolidating the SNP2.0 and Win32 api's. (42.20) - Implemented simplistic sending of icon data over SNP using a modified form of Base64 encoding. (42.20) - Unregistering and updating a password-protected application now fails if the correct password is not supplied. (42.20) - SNP2.0-created notifications now receive replies to the remote port when a notification times out, etc. (42.19) - Added password support for applications. If a password is supplied by an application during registration, the same password must be used whenever a new notification is created. (42.18) - Added a new emblem which appears in any notifications generated by remote applications. (42.18) - Added support for incoming Growl UDP notifications on port 9887 (same as SNP). Growl applications can register, add notification types (classes) and create notifications. (42.18) - Implemented native SNP2.0 support. (42.18) - If a notification has actions an indicator icon is now drawn in the bottom right corner. (42.17) - If we can't actually display a notification (usually down to lack of free screen space) we now set lasterror to ERROR_COULD_NOT_DISPLAY and either add it to the missed list (for notifications with a normal or high priority) or discard it (for notifications with a low priority). (42.17) - Garbage collection (only available on XP or higher) option added to debug page. (42.17) - When DnD is in effect, notifications which end up being logged in the missed list are now allocated a unique token and LastError is set to ERROR_DO_NOT_DISTURB to indicate it was missed. This allows applications to (a) take alternative action and (b) continue to manage the notification (e.g. by adding actions to it). If a notification is not added to the missed list during DnD, LastError is still set to ERROR_DO_ NOT_DISTURB but this time a zero token is returned. (42.16) - Fixed bug in notification handling logic when DnD is in effect. (42.16) - JSON notifications were not being displayed even if listening for them was enabled, now fixed. (42.15) - Missed notifications are now listed in reverse order (i.e. most recent first) in the panel. (42.13) - Better missed notification handling. Snarl tray icon now changes to indicate missed notifications. Double-clicking the icon at this time will open the missed notifications panel rather than the preferences panel. The icon (and double-click feature) reset to normal as soon as the panel is displayed. (42.12) - Fixed bug which prevented the Missed Notifications notification from appearing under certain circumstances. The notification now has a single "Missed Notifications..." action and uses the AUTO_DISMISS flag. (42.4) - R2.4 Beta 2. (42.3) - Fixed private internal style preview function to work with V42 styles. (42.3) - Application Registered notifications now support actions. (42.2) - sn42AddAction() now supports a "command" parameter. If an item with a command is selected by the user, Snarl processes this in the same way it does an Ack command. (42.1) - Bumped to V42. (42.1) - Added sn42ClearActions() which removes all defined actions from a notification. (41.83) - Notification scaling is now applied to the close and actions buttons. (41.82) - Added new actions feature. This comprises of a new API function - sn42AddAction() - which requires a valid notification token and a new notification message parameter - SNARL_NOTIFICATION_ACTION (38) - which is sent from Snarl. (41.81) - Extension's page, "Details..." button now removes previous notification before displaying new one. (41.81) - Fixed spurious escape codes appearing in some Snarl-generated notifications. (41.80) - Low-priority notifications are no longer queued; any existing on- screen low-priority notification is removed before the new one is displayed. (41.80) - When merging notifications the timeout of the merged notification is used, not the sum of what's left and the merged notification. (41.80) - Application Registered notification text changed yet again (still only applies on first register) and right-click menu (always applied) added to provide access to both the notification settings in Snarl's panel and - if the app has one - the app's GUI. (41.78) - Added support for MP3 sounds. (41.78) - The "Notification Settings..." menu item now selects the notification's class as well as the application. (41.78) - Notifications created without a "timeout" token were getting 0 (sticky) applied to them. Now fixed such that they receive the system default timeout instead. (41.78) - Application Registered notification is now slightly different on first registration compared to subsequent registrations. On first registration *only*, clicking the notificaton will launch the class configuration panel for the application. The text that appears in the notification is slightly different as well. (41.77) - New notification flag - SNARL41_NOTIFICATION_AUTO_DISMISS - which causes the notification to be automatically closed if the user right- or middle- clicks it. If the notification has a right-click menu assigned it will be closed after the user has selected an item from the menu (or cancelled the menu). Note that the relevant notification messages are still sent by Snarl if this flag is specified. (41.77) - R2.4 Beta 1. (41.75) - Fixed bug in g_MakeValidPath() which was clobbering '\' characters and therefore trashing any passed paths. (41.75) - Bug in icon handling code meant that "special" icons (e.g. those extracted from resources or specified by an HICON) would only apply the first time a notification was displayed. Now fixed. (41.73) - We now broadcast two new messages - SNARL_BROADCAST_STARTED and SNARL_BROADCAST_STOPPED - when Snarl is started and stopped respectively. (41.71) - Custom sounds now working. (41.69) - uMakePreviewName() wasn't stripping out invalid filesystem characters (/ \ < > etc) - now fixed. (41.58) - Added support for new S_STYLE_V41_CONTENT flag. This is handled in CSnarlWindow.uUpdateStyleContent() which, if the flag is set, sends the calling application's name in the notification's title and the unabridged notification content (packed data format) as the text. (41.58) - Added basic notification merging. (41.57) - Added "Check Now" button to General page which will kick off a forced update check. In this case only, Snarl will notify if the user is running the current general release. (41.56) - Number of missed notifications (if there are any) is now displayed in the tray tooltip and in the Missed Notifications... menu item. (41.55) - Clicking the "<appliction> registered" notification will now launch the application's class configuration panel. (41.54) - Notification scaling implemented. This is a bit rudimentary as it's only applied to the incoming notification content and not to the final displayed notification (the upshot being that the close and timestamp gadgets are not scaled). Also worthy of note is that scaling will most likely break (or seriously upset) styles which position and/or size the notification themseleves. (41.53) - Added a further escape sequence ("\+") which can be used in either the title or text of a notification, however it only applies to updated notifications. The sequence is replaced with the current notification text so, for example, "\+\nHello world!" would append a CRLF and "Hello World!" to the existing notification's content. (41.53) - Basic line overflow implemented. This simply breaks the incoming title and text on each CRLF pair and counts the resulting "lines". If the number of lines is greater than the specified overflow amount (max of 12 lines) then the second line is replaced with an ellipsis and only the last n-2 lines are displayed. (41.52) - Extensions not set to start up were not being released correctly. Now fixed. (41.52) - R2.31. (41.51) - We now do COM garbage collection after loading extensions from a folder. (41.50) - Built as R2.31 beta 1. (41.49) - Notification close button is now sized according to the smaller of the close bitmap itself and the notification height. (41.47) - EmptyWorkingSet() is now called whenever the system information notification is displayed and also after 5 minutes if no notifications have been created in that time. (41.47) - R2.31 d4. (41.45) - Bug fixes and more code tidying up within the notification roster. (41.39) - Extension exclude file internal object changed although this should be completely transparent to everything. (41.39) - Snarl's config path is now registered as a global atom and the atom is stored as a window property. This is so apps, style engines and extensions can use it to store their settings in a sysadmin-friendly manner. (41.39) - Extension roster's 'exclude' file now obeys the variable Snarl config folder location. (41.39) - 'Duplicates' cycle button replaced with 'Prevent Spam' toggle switch. (41.39) - Juggled class configuration panel content around again. (41.39) - Added per-class option to not have notification logged as missed while Do Not Disturb is enabled. (41.39) - Added user-definable acknowledge feature. (41.39) - Released as R2.31d2. (41.38) - Revised system admin functionality. (41.38) - Released as R2.31 b1 (should have been d1). (41.37) - Added system adminstration functionality. (41.37) - Missed Notifications "Acknowledge" button should now function as expected. (41.37) - Consolidated a couple of internal notification data types (specifically G_NOTIFICATION_CONTENT and T_NOTIFICATION_INFO). (41.37) - sn41Update() was corrupting notification content. Now fixed. (41.36) - Fixed broken "run on logon" option. (41.35) - Extension details notification now suppresses version number for extensions with version and revision of zero. (41.35) - Released as R2.3. (41.34) - Added new status code SNARL41_ERROR_NOTIFICATION_NOT_FOUND'. (41.32) - sn41Update() renamed to sn41EZUpdate() and a new sn41Update() added which mirrors sn41Notify(). (41.32) - sn41AddClass() now sets LastError to CLASS_ALREADY_EXISTS if the class being added has already been defined. [Toke] (41.32) - Removed graphics test code and associated prompting. (41.32) - Removed RC branding. (41.32) - Fixed bugs in preferences hotkey code. [Toke] (41.32) - Melon release number (rather than the exec.library version) is now displayed in the system information notification. (41.31) - Missed notifications are now checked (and notification displayed) on a manual DnD enable/disable. (41.31) - Notifications with remotely hosted icons now have the icon displayed in the Missed Notifications panel. (41.31) - More minor interface improvements to the Missed Notification panel. (41.31) - Icons in the Missed Notifications panel now have their aspect ratio preserved. (41.31) - Missed Notifications panel now displays sending app and class used for the notification. (41.29) - Missed Notifications panel now displays the notification timestamp's seconds. (41.29) - Removed idle timeout controls from panel and idle checking code. This will be moved into the DnD extension. (41.28) - Added functionality to system DnD functions such that if notifications arrive while DnD is enabled, when DnD is finally disabled Snarl will display a notification detailing the number of missed notifications. (41.27) - Further improvements to the way sn41Update() works. (41.26) - sn41Update() didn't send timeout value. Now fixed. [Toke] (41.25) - Renamed sn41RemClass() and sn41RemAllClasses() to sn41RemoveClass() and sn41RemoveAllClasses() respectively. Added sn41Notify() although this is still to be documented and approved. [Toke] (41.25) - Removed redundant "Launch App Manager" button from Advanced page. [psy] Fixed bugs in - and tidied up - Debug page. (41.24) - Released as R2.3 RC1. (41.23) - Changed the way the SNARL_LAUNCHED and SNARL_QUIT broadcast messages are sent (PostMessage() is now used over SendMessageTimeout()) and the point when the initial SNARL_LAUNCHED is sent. Most importantly, broadcasts are *no longer sent* when Snarl is stopped or started (but remains running) however each application that has registered a window handle and reply message will still receive a SNARL_LAUNCHED and SNARL_QUIT notification. (41.23) - Notification "Details" menu now includes the name of the notification class and a "<App> Settings..." option which will open Snarl's Preferences Panel (if it's not already open) and select the application from the registered apps list. (41.20) - Fixed bug that was preventing some icons from being downloaded via a URL. (41.19) - Notification fade in/out speed increased (ought to be made configurable) and info notification formatting changed slightly. (41.18) - sn41AddClass() now supports the ability for applications to add classes that are disabled by default. (41.17) - SNARL_GLOBAL_MSG broadcast message now sends the system version number in lParam. (41.16) - Snarl Apps without a GUI are now ghosted in the Snarl Apps menu. (41.15) - Registered applications which have no icon are now given a default icon in the prefs panel. (41.12) - Settings should now persist. (41.11) - Added support for .ico files and for the extraction of icons from resource files. To extract an icon from a resource file, append a comma and then the icon's resource identifier (or index) to the icon path. In all cases, Snarl will attempt to extract the largest, most colourful version of the icon contained within the file. (41.8) - Bumped to V41. (41.1) - Notification forwarding ("Copy To") implemented. (40.55) - TMainWindow also accepts WM_CLOSE as an alternative to MSG_QUIT. (40.55) - MSG_QUIT and MSG_PREFS were incorrectly being handled by frmAbout as opposed to TMainWindow. Now fixed. (40.55) - Renamed to R2.3 Beta 1 (40.54) - Any notifications left on-screen when Snarl is stopped (or restarted) are now removed. [SF FR 2935808] (40.54) - Fixed bug where fuzzy notifications timed out even while fuzzy (i.e. mouse pointer over them). (40.54) - Added 'Details' submenu to notification menu. Currently displays timestamp and sending application name. (40.54) - Added optional display of timestamp while mouse pointer is over plugin. [SF FR 3000019] (40.54) - Prefs Panel "Display" sub pages reorganised. (40.54) - Idle timeout cycle button added to "General" page. [SF FR 2935822] (40.54) - Class Panel sub pages reorganised. "View only" mode is now simply known as "ignore mouse and other input" and toggle button in the panel now works. (40.54) - Can now install new/existing Style Engines from the Style Engine Panel. (40.54) - sz41EzNotify() now accepts a "Value" entry (encoded as 'value' in the packed string). The concept is that it should be free-form and can encapsulate the format of the value along with it - the obvious example of this is a value of '45%' which would be displayed by the various meter styles. Other value types can be used and defined on a case-by-case basis. (40.53) - Fixed bug in the apps preferences page which was causing the wrong application to be selected from the list. (40.51) - Notifications (theorectially) now fade out twice as fast as they fade in. (40.51) - Added "IP forwarder" default style. (40.49) - Fixed auto update check (same bug as for the remote icon download code). (40.49) - Released as 2.1A2. (40.48) - Fixed two major bugs in the remote icon / delayed notification handling code which in some cases caused Snarl to get stuck in an infinate loop downloading the same icon. Thanks - as always - to Sven to both spotting and debugging the problem. (40.48) - Fixed bug that meant Snarl would create JSON and SNP listeners even if the appropriate setting was disabled. Spotted by Patrick Von Reth. (40.48) - Notification menu now displays the creating app's name in the "Close all from this app" item. (40.46) - Removed the new "Snarl Apps" menu item and replaced it with a new toolbar in the Apps Page. The toolbar has two options - "Details" and "Settings..." which send the registered application a SNARL_SHOW_ABOUT and SNARL_SHOW_PREFS message respectively. The buttons are ghosted based on the flags and application specifies during registration. Aside from neatening up access to applications, this now means that applications with GUIs can still be configured from Snarl as they used to be. (40.42) - Fixed bug in App Roster which meant some applications weren't registering correctly. (40.42) - APP_SUB_VER changed to 3. (40.42) - Only priority notifications are now forceably made sticky if away mode is enabled. (40.42) - Changed "Enabled" toolbar button on Extensions page to "Details" which generates a notification showing more information about the selected extension. (40.41) - Fixed (again) the way extensions are loaded up and initialised. new TExtension.SetTo() function is called one time only for each potential extension and succeeds if the extension appears to be valid and retrieves information from the extension. TExtension.SetEnabled() can now assume the extension is valid. (40.41) - Lemon3 logging is now only enabled if debug mode is enabled. (40.41) - Released as R2.3 Alpha 1. (40. - Applications can now specify a timeout of -1 (unclear if this was previously documented) which indicates that the Snarl global default timeout should be used. (40.25) - Applications using the V41 API can now specify a priority for a notification. This can be -1 (low), 0 (normal) or 1 (high). At this time Snarl does not differ in how it handles low or normal notifications, although this will change in the future. The class settings panel has been changed to allow the user to over-ride the priority setting for any class. (40.25) - Many improvements to the underlying application, class and notification handling code - provides a much more structured approach. (40.25) - Class configuration mini-panel re-designed to have two - Basic and Advanced - pages. (40.25) - Global and per class settings completely re-written from scratch. Each app now has it's own configuration file which contains the registered classes. (40.25) - Increased V41 API support. (40.25) - Added new "Copy content to Clipboard" option to notification menu. [FR2935816/dragonmage] (40.24) - IStyleInstance::Pulse() is now called while the notification is fading out. (40.20) - Style/Scheme preview image is now automatically refreshed when the style's configuration window is closed. (40.24) - Bumped to R2.3a1. (40.20) - Includes final misc.resource and revised Prefs Kit. (40.19) - If debug mode is enabled then all extensions are disabled irrespective of their inclusion within .exclude. The .exclude file is never written in debug mode. (40.19) - Improved extension handling. Enabling/disabling an extension simply moves the extension out of/in to .exclude. Disabled extensions have their icon greyed; enabled extensions which fail to start have their icon replaced with a warning one. (40.19) - Debug mode can now be enabled by holding down either CTRL key. (40.19) - Added full-screen app detection (code from now redundant DoNotDisturb extension). (40.16) - Added basics for away mode detection. (40.16) - \n's in the notification title or text elements are now translated into CR/LFs. Note this happens after logging so the original \n's are preserved. (40.16) - MakeFuzzy() routine within CSnarlWindow now uses asynchronous fading (uSetTargetAlpha()) - improves responsiveness. (40.16) - Released as R2.21. (40.15) - Style Engines can now be loaded manually even if they're not already known to Snarl. (40.12) - Added 'icon' element to 'add_class' SNP action. Specifying an icon here allows it to be used for subsequent notifications created with that class. (40.11) - SNP protocol now takes a single Chr(13) as the terminating value rather than a Chr(13)/Chr(10) pair. (40.11) - Cosmetic improvements to iPhoney bar look. (40.11) - Added 'icon' element to SNP1.1 'notification' action. This supports local and remote icons in the same way the API does. (40.10) - Stopped error dialog box appearing when unloadable style detected. (40.9) - SNP1.1 now reports notification token in success response as SNP1.1/0/OK/nnn where 'nnn' is the token number in decimal. SNP1.1 notifications (3xx) also report the token number in the same way. (40.8) - Fixed bug in SNP 'notification' action handling which would cause it to fail if a timeout value wasn't specified. (40.8) - SNP bumped to 1.1. Fully compatible with 1.0 requests, it just now supports forwarding notification events back to the remote application. Notification values start at 302 (effectively the API notification value plus 270). (40.8) - The icon path for notifications can now reference an image located on a web server. Currently only the http:// and https:// protocols are supported. (40.7) - Excluded extensions were being ignored by the Extension Roster during startup - now fixed. (40.7) - Kill message from stop.exe wasn't properly killing the Snarl process - now fixed. (40.6) - Released as Snarl R2.2. (40.5) - We're no longer a Beta so panel is suppressed. (40.4) - Auto-update was indirectly using a SERVERXMLHTTP40 object to do its stuff. Bizarrely, this isn't supported under Windows 7 (apparently being replaced with SERVERXMLHTTP60 instead) so we now use a SERVERXMLHTTP30 instead. (40.4) - Added new S_STYLE_WANT_APP_NAME flag to Style type library. If a Style specifies this option, Snarl will prefix the sending application's name to the notification title. Styles can then extract this information and use it accordingly. (40.2) - Fixed a couple of nasty bugs to do with trying to preview windowless notifications. (40.2) - Auto-update feature now has on/off button in preferences. (40.2) - Removed network sending stuff. (40.1) - Simplified auto update feature. Now we simply check for an update on startup and, if one is available, we show a notification to that effect. (40.1) - Finally bumped to V40. (40.1) - Dropshadow size is now configurable. (39.86) - Default style is now iPhoney/Standard. (39.86) - Tidied up the two "Display" sub pages. (39.86) - "Use the same settings for all classes" option now takes effect. (39.86) - Added "Beta Usage" pop-up panel. This appears on each launch until the user acknowledges it. This is only for use in Beta releases; it won't appear in dev or finals. (39.85) - Added auto-scheme preview (suggested by XXXXXXX) such that if the appropriate <scheme>.preview image doesn't exist Snarl will dynamically create one. The dynamic image is called <scheme>.prvw and is re-created each time (which might slightly affect performance). (39.84) - Can now unload and reload style engines. The load ability only applies to 'known' engines (that is, engines which Snarl loaded up when it first launched). (39.80) - Change log lost - ... - Change log lost - Renamed SNP return codes from SNB_xxx to SNP_xxx. (39.39) - Released as R2.1 Beta 3. (39.38) - - Toggling the "Use same settings for each class" swtich now selects the first class (<All> or <Other>) and then disables or enables the classes listbox. (39.29) - Style Config button renamed to 'Configure Style' and now calls the Style Engine's ConfigRequested() hook. (39.28) - New 'Show notification on first registration only' toggle button added to General page. Not fully implemented yet. (39.26) - New 'Advanced' page with App Manager and Reload Styles buttons moved into it as General page was starting to get full. (39.26) - Styles page now has 'Configure' button back in although this isn't implemented as yet. (39.26) - New Prefs Kit d0 fancytoolbar used in Styles and About pages to replace to multiple buttons. (39.26) - Various bits of hocus pocus and other related magik. (39.26) - Snarl now adds a "Local Anonymous Notifications" class which snShowMessage() notifications are now channeled through. This makes it easier for the user to block them if required. (39.22) - Two new private functions added - snPrivateOpenStyleRoster() and snPrivateCloseStyleRoster() - which wrap the new E_MANAGE_ STYLE_ROSTER command described below. (39.20) - Two new WM_SNARL_MANAGE commands added. "E_MISC_CMDS" is just that; a placeholder for miscellaneous stuff. Only one sub- command is currently defined - #1 - which enables the "sticky notifications" option. "E_MANAGE_STYLE_ROSTER" allows for external control of the style roster with two sub-commands: #1 opens the roster and #2 closes it. Some cosmetic improvements have been made to the Styles page to cater for it being open when these commands are received. (39.20) - WM_SNARL_MANAGE constants are now named although are _still private for the moment_. This is important as these most likely *will* change shortly. (39.20) - Added new SNARL_COUNT_NOTIFICATIONS private command. This is due for documentation in the V40 release. (39.12) - Changed URL that opens when the "Snarl Forums" button is clicked. (39.11) - Styles page: Schemes listbox item height changed to 24px and scheme icons now displayed. (39.9) - Added a fix to the EZ style image loading code which gets round the bug in graphics.library which locks an image file. (39.8) - Apps page: apps drop-down list is now refreshed if an application registers/unregisters while the panel is open. (39.7) - Apps page: checking/unchecking a class had no effect. Now fixed. (39.7) - Released as Beta 1. (39.6) - Apps page: added new 'Advanced' subpage with a single cycle button which can be used to override per-class notification suppression settings. (39.6) - Extensions page: Ticking/unticking an extension causes the list to be refreshed but doing so messed up the selected item. Now fixed. (39.6) - Extensions page: Ticking/unticking an extension didn't update the apps list in the Apps page. Now fixed. (39.6) - Schemes can now supply an icon that is displayed in any scheme- related drop-down boxes. (39.6) - Bumped to V39. (39.1) - Incorporated V39 api into standard include. (38.156) - Fixed hotkey bug - no longer registers CTRL on its own if option is turned off (spotted by Sven). (38.152) - Default style/scheme is now set in the 'Styles' page (Display tabs adjust accordingly). (38.152) - Fixed bug with default start positions if the relevant packed data entry doesn't exist. (38.150) - Added button to launch App Manager from General Page. (38.150) - Can now redefine hotkey! Only the keycode can be specified; Snarl creates both hotkeys using the same keycode. Of note is that the creation function only fails if the Prefs hotkey cannot be created. (38.149) - Snarl now sends a SNARL_NOTIFICATION_CLOSED to the reply window if the user clicks on a notification's close gadget. [Specially requested by Sven]. (38.148) - 'About' page improved. (38.147) - Minor tweaks to Preferences Panel content. Snarl now uses large icon (128x128px) when it registers itself. (38.146) - Can now specify per-class notification position. :) Wasn't that hard to add after all... (38.145) - Built-in styles reworked as 'Classic' style engine and significantly tidied up (reduced class count again). (38.144) - Slight re-juggling of the 'Display' tab in the Preferences Panel. Default notification position is now in the 'Class Defaults' sub-page although it currently *still* applies globally (but it does leave the door open for per-class postion setting). (38.144) - Toggle buttons on 'General' page were setting the correct switches but weren't writing the config file out - now fixed. [Found by Sven]. (38.144) - Significant rewrite of entire style management system. Style Packs are now known as Style Engines and Styles themselves (in a programming sense) are now known as Style Instances. A new type library has been created which covers this and should be used in lieu of the now deprecated snarl.tlb. In addition to a much cleaner code layout, a number of internal objects have been replaced with structs (UDTs) and the StyleRoster has had a full makeover which has added a bunch of useful helper functions (and removed all the useless ones). Styles can now specify a preview image which gets displayed in the 'Styles' tab of the Preferences Panel. The preview images must be in the Style's path and should be called either '<scheme>.preview' or 'style.preview' with the former being chosen over the latter if it exists. This means styles can provide a preview image per-scheme or simply one for all schemes. (38.143) - T_ACTION_SHOW_NOTIFICATION icon uses a different icon if the specified application was registered with Snarl. (38.143) - Network protocol firming up. We now support application registrations and revocations, as well as (minimal) class additions. (38.143) - Some internal code-saving done with new TApp.Show() and TAlert.Show() functions. TAlert.Show() decodes the passed parameters in relation to the class it represents (it also figures out duplication suppression). TApp.Show() simply calls TAlert.Show() after figuring out whether it needs to provide it's hWndReply and uReplyMsg values. (38.143) - New V39 'friendly' class names now show up in Prefs Panel (38.140). - Now processes new /etc/startup-script file (unless the user blocks it by holding down either CTRL key during startup). This file is managed by the new Snarl App Manager using the -add and -remove command line options. (38.139) - Changes to the way mouse button clicks are handled by a notification had screwed things up a bit in that mouse capture wasn't released until *after* a notification had disappeared. Now fixed. (38.138) - New WM_MANAGE_SNARL token - SNARL_RELOAD_CONFIG (9) tells Snarl it's config file has been updated and should be reloaded. Note that this is for future implementation and should not be used at the moment. (38.137) - Released as R2.1b1. (38.136) - Added new E_SNARL_CLASS_DELAY_DUPLICATES class flag (new API only). If specified, Snarl will suppress duplicate notifications that happen within a specified quantum. The quantum is configurable (although not via the GUI) and defaults to 2000ms with a minimum setting of 500ms. (38.135) - 'About' page now loads up read-me. (38.135) - 'Styles' page no longer has a margin. (38.135) - 'Listen for incoming Snarl notifications' checkbox was permanently greyed out. Now fixed. (38.135) - Removed all references/code relating to Brian's Vortex framework. (38.135) - Added new SNARL_NOTIFICATION_MIDDLE_BUTTON notification, sent (surprisingly) when the user clicks the middle mouse button on a notification. Note that the notification is *not* removed after sending the message; it's down to the calling app to handle it appropriately. (38.133) - Added support for right-click menu on a notification. To enable a menu, send Snarl a SNARL_CHANGE_ATTRIBUTES with SNARL_ATTRIBUTE menu as the menu to change and the Id of a previously created notifcation. The value parameter defines the menu content in a <item>#?<id>|... format. Separators can be added by including a blank item (i.e. ||) in the value parameter. To specify an item is greyed out use -1 as the <id> value. Submenus are not currently supported. All this is private and will be documented in V39. (38.132) - Notifications displayed using a class are now suppressed (not displayed) if the title and text are identical to the previously displayed notification for that class. (38.132) - New internal NotificationRoster object has meant a lot of global module code could be moved into a class. Means nothing on the outside, but things are slightly neater internally. (38.132) - Added JSON handling code. Still rather rudimentary at the moment but incoming JSON packets sent to the local host (i.e. 127.0.0.1) should now be recognised and displayed. (38.132) - Slight (but significant) interface change to notifications: now Snarl ignores a mouse button release if it's either over a different client area than when it was pressed or outside the notification altogether. (38.131) - Holding down CTRL while right-clicking a notification close gadget now adds an extra 'Capture Notification' option to the menu. Selecting this will save a PNG capture of the notification (without the close gadget) to the desktop. (38.130) - Added version info and copyright (as URL) to About page. (38.129) - snPrivateAddClass() can now have an optional description. If one is specified, this is used in the 'Registered Classes' list in Snarl Preferences. (38.128) - snPrivateShowNotification() and snPrivateSetClassDefault() now use the calling app's PID. Also, snPrivateShowNotification() now no longer requires the Title and Text parameters. (38.127) - SNARL_UNREGISTER_APP now refreshes the app list if Snarl's preferences panel is open. (38.125) - Lots more work done to private functions. snPrivateRegisterApp() now has its own dedicated command - SNARL_REGISTER_APP - and, importantly, the order of the passed parameters has changed. It must also pass the Pid of the registering app to Snarl - without this the call will fail. snPrivateUnregisterApp() has also been changed: it too has it's own command - SNARL_UNREGISTER_APP - and now no longer needs any parameters, instead the api must pass the calling app's Pid which Snarl uses to find the app and unregister it. This now means that *one application can only register once with Snarl* which makes a lot more sense really. (38.124) - Made some other changes to private constants and functions. (38.119) - snPrivateRegisterConfig2() renamed to snPrivateRegisterApp(), snSetAlertClassDefault() renamed to snPrivateSetClassDefault() and snPrivateRegisterAlert() replaced with snPrivateAddClass(). Told you not you use them, nerrr. Also added new snPrivateUnregisterApp() although this is simply a renaming of snRevokeConfigWindow() - it doesn't even qualify for a new command message. (38.118) - We now take note of a class default timeout when displaying a notification. (38.118) - Fixed bug in EZ Style which was incrementally offsetting text to the right each time a notification was updated. (38.118) - Built-in styles version number changed to m.n (as opposed to v.r) to follow that of EZ Styles. Author is now returned as 'full phat products'. (38.117) - Fixed bug with built-in styles always returning Halon instead of the requested one. (38.117) - Released as R2.06. (38.113) - Added missing Glass Schemes and renamed Bubblegum schemes to match previous ones. (38.113) - EZ Style now trims title text to fit to a single line. (38.113) - Style preview text changed slightly. (38.113) - If the font specified in an EZ Style doesn't exist, we now default to using Tahoma. The point size specified is still honoured however. (38.112) - Implemented 'EZ Styles' - text-based config files which allow for styles with multiple schemes. Functionality is fairly good considering the basic limitations and the 'Glass' and 'Bubble Gum' styles have been completely replaced with EZ Styles. (38.111) - 'Cancel' button on prefs panel is now 'Close' instead. (38.111) - Added two new private functions - SNARL_LOAD_EXTENSION and SNARL_UNLOAD_EXTENSION - which load and unload an individual extension respectively. SNARL_LOAD_EXTENSION expects the full path to the extension's folder; SNARL_UNLOAD_EXTENSION expects the extnension's short name (i.e. the name of the extension's enclosing folder). These functions will be documented in the fullness of time but they are not considered to be for general use. (38.110) - Fixed bug in Extension Roster which would send a SNARL_EXT_QUIT to an extension even if it was disabled. In most cases this bug went unnoticed but disabling the SnarlClock extension would cause Snarl to crash on exit. (38.103) - Released as R2.05. (38.102) - Fixed stupid bug which caused Snarl to crash when Save button in Preferences was clicked. (38.102) - Released as R2.04. (38.101) - Snarl was ignoring a WM_CLOSE sent to it. Now fixed. (Thanks to Toke Noer for spotting that one). (38.100) - Can now define an 'ACK string' which Snarl will attempt to execute when a notification is left-clicked (ACK'd). This can be set on a per-alert class basis (using snSetAlertClassDefault()) or once a notification has been displayed using new snChangeMessage() [SNARL_UPDATE_ELEMENT] private function. All of this is currently *private* and is due for documentation in V39. If a notification has an ACK string assigned to it, Snarl will simply call the Windows ShellExecute() function with the contents of the string as the <File> parameter - this allows for non-files (e.g. URLs) to be used. If a notification has a valid reply window and message this is still sent after the ACK string has been processed. (38.94) - Added new snSetAlertClassDefault() [SNARL_SET_ALERT_CLASS_DEFAULT] private function which allows the caller to set specific defaults for a previously registered alert class. Currently supported defaults are the notification title, timeout, icon and sound. These are used by both snShowMessageEx() and snShowMessageExByApp() if any of the corresponding values passed are blank. The timeout default is not actually implemented as yet. (38.84) - If the Vortex framework is available we automatically (for now) start listening for notifications. We support notification types (classes under Snarl) which are registered automatically. Snarl uses two local icons - remote_app.png for the app's entry in the list and remote.png in the Snarl itself. (38.83) - Network tab now appears if Brian's Vortex framework is accessible. (38.83) - Right-clicking the close gadget of a notification now pops up a context menu which allows the user to close the specific notification, all notifications created by the same app, or all notfifications. This replicates the CTRL/SHIFT-CLICK functionality already in place. (38.82) - Renamed "Applications" tab to "Apps". (38.82) - Added new "Display" preferences tab and moved parts of the "General" tab content into it. Also added new font smoothing options which can be utilised by styles if required. Options are (MelonType [0], None [1], Anti-aliasing [2], ClearType [3], or Windows Default [4]). The MelonType setting can also utilise a 'Contrast' percentage value. (38.82) - Added new "Themes" preferences tab and moved all the "Display Options" content into it. (38.82) - Added snShowMessageExByApp() which uses new SNARL_EX_SHOW_BY_APP command. This is currently *private* and scheduled to be formally documented in V39. This command allows applications to display extended notifications without having to provide a valid HWND, instead the application's name is used to identify the app. This can be useful for languages or applications which do not provide easy access to an HWND but the obvious limitation is that Snarl cannot send left or right click notifications back to the app. (38.81) - Released as R2.0. (38.79) - Default style/scheme is now "Glass/Smoke". (38.70) - Made some small but significant changes to Snarl's startup code - specifically around when it broadcasts its SNARL_LAUNCHED and SNARL_QUIT messages. Hopefully this should now stop some special- case weirdness where notifications are displayed before the style roster (and, indeed, Snarl itself) are fully up and running. (38.69) - Fixed bug which meant that for both SNARL_REGISTER_CONFIG_WINDOW and SNARL_REGISTER_CONFIG_WINDOW_2 the applications list *wasn't* being updated if either of these calls succeeded (they return an M_RESULT not a BOOL). (38.66) - Moved (and renamed) the two Style interfaces into a separate tlb and removed the now redundant interfaces from within the app itself. The new type library will be installed and registered by the RC2 installer. (38.65) - Built-in style pack now looks for %app_data%\Snarl\Styles\.bubblegum which, if found, is used to configure the "BubbleGum" style. This configuration is on a per-style (as opposed to per-scheme) basis so changes apply no matter which scheme is selected. Note that this is really only intended to demonstrate functionality; no .bubblegum is created if it doesn't exist (although you can use the melon Configuration File Creator tool to create one). (38.64) - Released as RC1 (38.63) - Added snPrivateRegisterConfig2(). This extends snRegisterConfig2() by allowing a large icon (ideally 256x256 pixels) to be specified as well as the small icon for the registering app. If a large icon is specified, Snarl will attempt to use this in the registration and unregistration alerts it displays. Note that this function is currently private and is due for documentation in V39. For now it should only be used under direct guidance from application developers. (38.62) - Added compiler constant EXCL_PUBLIC which will exclude public features of mSnarlPrivate_i when both includes are referenced. As mSnarlPrivate_i and mSnarl_i are not really compatible the only time this really only applies to the Snarl code itself. (38.61) - Tidied up includes. Moved commented-out Unicode support into new mSnarlUnicode_i.bas include file. Created new mSnarlPrivate_i.bas include file which contains as yet unofficial functions. (38.61) - Added snPrivateRegisterAlert() which uses SNARLSTRUCT->LngData2 to specify additional flags for the alert. The only flag currently defined is SNARL_ALERT_DISABLED which registers the alert as disabled. Note that this function is currently private and is due for documentation in V39. For now it should only be used under direct guidance from application developers. (38.60) - ===== - Removed references to "default_opacity" and "default_dye_colour" as these are no longer used. (It's up to the style to determine how it looks now). All Snarl's are displayed at maximum opacity (255) in order to make the fading rountines simpler. Styles can still generate transulcent Snarls by simply drawing their content accordingly. (38.18) - ===== - Version bumped to V38. (38.1) - Version, etc. changed to R1.6 final. (37.85) - Released as RC-2. (37.84) - SNARL_UPDATE and not specifying anything in IconPath would kill any existing icon. Now fixed. (37.84) - SNARL_IS_VISIBLE now returns False once the notification starts fading out, not once it's finally disappeared. Suggested by Sam Listopad (37.80) - SNARL_UPDATE now resets the timeout value to what it was when the notification was first displayed. Suggested by Sam Listopad. (37.80) - New icons for the Preferences panel. (37.78) - We now return M_NOT_IMPLEMENTED for invalid standard command values. Oops. (37.78) - About box revised slightly. (37.78) - Application Registered/Unregistered notifications are no longer shown for Extensions. (37.76) - Snarl now registers itself and creates three alerts: Welcome Message, Application Registered and Application Unregistered. Should be fairly self explanatory. (37.74) - More debug output added. (37.70) - Released as RC-1. (37.61) - VB version of include file reworked to resolve bugs with the new UTF8 conversion functions (basically, under VB, characters such as £ (UK Pound Sterling symbol) and (Euro currency symbol) were being lost. (37.61) - Sound notifications improved slightly. Also, system sounds can now be played by prefixing the sound name (e.g. 'MailBeep') with a '+' symbol. (37.61) - Extension manager now sends HWND_SNARL in the hWnd parameter of the WndProc() hook so that extensions can distinguish between messages from the Extension manager and those from a window. Note that HWND_SNARL is *not* a genuine window handle; extensions which require a handle to the Snarl Dispatcher should use snGetSnarlWindow(). (37.59) - Alerts list improved slightly. Now, when clicking a checkbox, only the icon is updated rather than the whole list content. (37.59) - Various snxxx() functions weren returning True/False instead of an error number. Fixed. (37.57) - snIsVisible() handling was broken, now fixed. (37.57) - Added support for new snUpdateTimeout(). (37.57) - g_UnloadExtensions() now frees up extension dlls correctly. This means installers should be able to install over existing extensions. (37.51) - g_GetExtensions() now checks a new file called 'excluded' in the extensions folder. Names of extensions that appear in this file are not loaded. The file is a standard melon config file (except it has no extension) with a single [exclude] section. (37.37) To Do - V41 API - sn41AddClass() should return unique token DONE - sn41Notify() should use class token or zero to create an anonymous notification DONE - KeyLock extension - Dead Man's Handle extension - Clock 2.5 - netvold - apptd - Meter Styles Settings Factory Panel Settings Schemes Meter ----------------------------------------------------------------- - Just Black - iPhoney OK OK OK OK - Minimal OK OK OK OK - Sony - Icon pos not implemented, icon show not implemented - PS3 black gradient needs improving - Metro OK OK OK OK - Smooth OK OK OK OK - (1) - doesn't restore text colour correctly - (2) - doesn't display meter percent - Extensions - V40 extensions don't display name correctly Event DnD Sticky ------------------------------------------------------------------------- full-screen app in f/ground SET n/a computer locked SET SET either/or screensaver started SET SET either/or idle SET SET either/or Set DnD if: full-screen app in f/ground computer locked screensaver starts (how to detect is s/s stopped?) idle During g_RemDNDLock()... - check if zero (i.e. DND disabled) - if missed count > 0 then show "while you were away/there were <n> notifications" - clicking notification displays missed notification window SSL2 File Format ---------------- An SSL2 file is a standard text file which follows the INI file format. It doesn't include [section] blocks however. Defined entries are: target=<path to launch> REQUIRED args=<command line parameters> pwd=<working directory> show=<normal|maximised|minimised>