diff --git a/docs/releases/notification-spec-0.3.xml b/docs/releases/notification-spec-0.3.xml
new file mode 100644
index 0000000..ee57259
--- /dev/null
+++ b/docs/releases/notification-spec-0.3.xml
@@ -0,0 +1,977 @@
+
+
+
+
+
+
+ Desktop Notifications Specification
+ Version 0.3
+ 15 September 2004
+
+
+ Mike
+ Hearn
+
+
+ mike@navi.cx
+
+
+
+
+ Christian
+ Hammond
+
+
+ chipx86@chipx86.com
+
+
+
+
+
+
+ 0.3
+ 15 September 2004
+ cdh
+ Added hint and notification type sections
+
+
+ 0.2
+ foo
+ mh
+ Added replaces field to protocol
+
+
+ 0.1
+ foo
+ mh
+ Initial version
+
+
+
+
+
+ Introduction
+
+ This is a draft standard for a desktop notifications service, through
+ which applications can generate passive popups (sometimes known as
+ "poptarts") to notify the user in an asynchronous manner of events.
+
+
+ This specification explicitly does not include other types of
+ notification presentation such as modal message boxes, window manager
+ decorations or window list annotations.
+
+
+ Example use cases include:
+
+
+
+
+ Presence changes in IM programs: for instance, MSN Messenger on
+ Windows pioneered the use of passive popups to indicate presence
+ changes.
+
+
+ Scheduled alarm
+ Completed file transfer
+ New mail notification
+ Low disk space/battery warnings
+
+
+
+
+ Basic Design
+
+ In order to ensure that multiple notifications can easily be
+ displayed at once, and to provide a convenient implementation, all
+ notifications are controlled by a single session-scoped service which
+ exposes a D-BUS interface.
+
+
+ On startup, a conforming implementation should take the
+ org.freedesktop.Notifications service on
+ the session bus. This service will be referred to as the "notification
+ server" or just "the server" in this document. It can optionally be
+ activated automatically by the bus process, however this is not required
+ and notification server clients must not assume that it is available.
+
+
+ The server should implement the
+ org.freedesktop.Notifications interface on
+ an object with the path "/org/freedesktop/Notifications".
+ This is the only interface required by this version of the specification.
+
+
+ A notification has the following components:
+
+
+ Notification Components
+
+
+
+ Component
+ Description
+
+
+
+
+ Application Name
+
+ This is the optional name of the application sending the notification.
+ This should be the application's formal name, rather than some sort
+ of ID. An example would be "FredApp E-Mail Client," rather than
+ "fredapp-email-client."
+
+
+
+ Application Icon
+
+ The application icon. This is represented either as a path or a name
+ in an icon theme.
+
+
+
+ Replaces ID
+
+ An optional ID of an existing notification that this
+ notification is intended to replace.
+
+
+
+ Notification Type ID
+
+ An optional ID representing the notification type. See
+ .
+
+
+
+ Urgency Level
+
+ The urgency of the notification. See .
+
+
+
+ Summary
+
+ This is a single line overview of the notification. For instance,
+ "You have mail" or "A friend has come online". It should generally
+ not be longer than 40 characters, though this is not a requirement,
+ and server implementations should word wrap if necessary. The summary
+ must be encoded using UTF-8.
+
+
+
+ Body
+
+
+ This is a multi-line body of text. Each line is a paragraph, server
+ implementations are free to word wrap them as they see fit.
+
+
+ The text may contain simple markup as specified in
+ . It must be encoded using UTF-8.
+
+
+ If the body is omitted just the summary is displayed.
+
+
+
+
+ Images
+ See .
+
+
+ Actions
+
+ The actions send a request message back to the notification client
+ when invoked. This functionality may not be implemented by the
+ notification server, conforming clients should check if it is available
+ before using it (see the GetCapabilities message in
+ . An implementation is free to ignore any
+ requested by the client. As an example one possible rendering of
+ actions would be as buttons in the notification popup.
+
+
+
+ Hints
+ See .
+
+
+ Expiration Time
+
+
+ The timestamp in seconds since the epoch that the notification should
+ close. For example, if one wishes to have an expiration of 5 seconds
+ from now, they must grab the current timestamp and add 5 seconds to it.
+
+
+ If zero, the notification's expiration time is dependent on the
+ notification server's settings, and may vary for the type of
+ notification.
+
+
+
+
+
+
+
+
+ Each notification displayed is allocated a unique ID by the server.
+ This is unique within the session. While the notification server is
+ running, the ID will not be recycled unless the capacity of a uint32 is
+ exceeded.
+
+
+ This can be used to hide the notification before the expiration time
+ is reached. It can also be used to atomically replace the notification
+ with another. This allows you to (for instance) modify the contents of
+ a notification while it's on-screen.
+
+
+
+
+ Backwards Compatibility
+
+ Clients should try and avoid making assumptions about the presentation and
+ abilities of the notification server. The message content is the most
+ important thing.
+
+
+ Clients can check with the server what capabilities are supported
+ using the GetCapabilities message. See
+ .
+
+
+ If a client requires a response from a passive popup, it should be
+ coded such that a non-focus-stealing message box can be used in the
+ case that the notification server does not support this feature.
+
+
+
+
+ Markup
+
+ Body text may contain markup. The markup is XML-based, and consists
+ of a small subset of HTML along with a few additional tags.
+
+
+ The following tags should be supported by the notification server.
+ Though it is optional, it is recommended. Notification servers that do
+ not support these tags should filter them out.
+
+
+
+
+
+
+ b ...
+ b
+
+ Bold
+
+
+
+ i ...
+ i
+
+ Italic
+
+
+
+ u ...
+ u
+
+ Underline
+
+
+
+ a href="..." ...
+ a
+
+ Hyperlink
+
+
+
+
+
+
+ What else do we want here? We're going to want more tags
+ for sure.
+
+
+
+
+
+ Icons
+
+ A notification can optionally include an array of images. The array of
+ images specifies frames in an animation, which always loop.
+ Implementations are free to ignore the images data, and implementations
+ that support images need not support animation.
+
+
+ If the image array has more than one element, a "primary frame" can
+ be specified. If not specified, it defaults to the first frame. For
+ implementations that support images but not animation, only the primary
+ frame will be used.
+
+
+ Each element of the array must have the same type as the first
+ element. Mixtures of strings and blobs are not allowed. The element
+ types can be one of the following:
+
+
+
+
+
+ Element
+ Type
+ Description
+
+
+
+
+ Icon Theme Name
+ String
+
+ Any string that does not begin with the /
+ character is assumed to be an icon theme name and is looked up
+ according to the spec. The best size to fit the servers chosen
+ presentation will be used. This is the recommended way of specifying
+ images.
+
+
+
+ Absolute Path
+ String
+
+ Any string that begins with a / will be used as
+ an absolute file path. Implementations should support at minimum
+ files of type image/png and image/svg.
+
+
+
+ Image Data
+ Binary Data
+
+ A data stream may be embedded in the message. This is assumed to be
+ of type image/png.
+
+
+
+
+
+
+
+
+ Notification Types
+
+ Notifications can optionally have a type indicator. Although neither
+ client or nor server must support this, some may choose to. Those servers
+ implementing notification types may use them to intelligently display
+ the notification in a certain way, or group notifications of similar
+ types.
+
+
+ The following table lists standard notifications as defined by this spec.
+ More will be added in time.
+
+
+ Notification Types
+
+
+
+ Type
+ Description
+
+
+
+
+ "email"
+ An e-mail notification.
+
+
+ "im"
+ A new IM notification.
+
+
+ "device"
+ A device-related notification, such as a USB device being
+ plugged in or unplugged.
+
+
+ "presence"
+ A presence change, such as a user going online or offline.
+
+
+ "transfer-complete"
+ A file transfer or download complete notification.
+
+
+
+
+
+ Third parties, when defining their own notification types, should discuss
+ the possibility of standardizing on the hint with other parties, preferably
+ in a place such as the
+ xdg
+ mailing list at
+ freedesktop.org. If it
+ warrants a standard, it will be added to the table above. If no
+ consensus is reached, the notification type should be in the form of
+ "x-vendor-name."
+
+
+
+
+ Urgency Levels
+
+ Notifications have an urgency level associated with them. This defines
+ the importance of the notification. For example, "Your computer is on
+ fire" would be a critical urgency. "Joe Bob signed on" would be a low
+ urgency.
+
+ Urgency levels are defined as follows:
+
+ Urgency Levels
+
+
+
+ Type
+ Description
+
+
+
+
+ 0
+ Low
+
+
+ 1
+ Medium (Normal)
+
+
+ 2
+ High
+
+
+ 3
+ Critical
+
+
+
+
+
+ Developers must use their own judgement when deciding the urgency of a
+ notification. Typically, if the majority of programs are using the same
+ level for a specific type of urgency, other applications should follow
+ them.
+
+
+ For the most part, server implementations may use urgency information
+ how they see fit. The one exception is the Critical notification.
+ As Critical notifications are things that the user will most likely want
+ to know about, they should not be closed until the user dismisses them.
+
+
+
+
+ Hints
+
+ Hints are a way to provide extra data to a notification server that
+ the server may be able to make use of.
+
+
+ Neither clients nor notification servers are required to support any
+ hints. Both sides should assume that hints are not passed, and should
+ ignore any hints they do not understand.
+
+
+
+ Third parties, when defining their own hints, should discuss the
+ possibility of standardizing on the hint with other parties, preferably
+ in a place such as the
+ xdg
+ mailing list at
+ freedesktop.org. If it
+ warrants a standard, it will be added to the table above. If no
+ consensus is reached, the hint name should be in the form of
+ "x-vendor-name."
+
+
+
+
+ D-BUS Protocol
+
+ The following messages must be supported by all
+ implementations.
+
+
+
+ Message commands
+
+
+ org.freedesktop.Notifications.GetCapabilities
+
+
+ STRING_ARRAY
+ org.freedesktop.Notifications.GetCapabilities
+
+
+
+
+
+ This message takes no parameters.
+
+
+ It returns an array of strings. Each string describes an optional
+ capability implemented by the server. The following values are
+ defined by this spec:
+
+
+ Server Capabilities
+
+
+
+ "body"
+
+ Supports body text. Some implementations may only show the
+ summary (for instance, onscreen displays, marquee/scrollers)
+
+
+
+ "markup"
+
+ Supports markup in the body text. If marked up text is sent
+ to a server that does not give this cap, the markup will show
+ through as regular text so must be stripped clientside.
+
+
+
+ "static-image"
+
+ Supports display of exactly 1 frame of any given image array.
+ This value is mutually exclusive with
+ "multi-image", it is a protocol error for the
+ server to specify both.
+
+
+
+ "multi-image"
+
+ The server will render an animation of all the frames in a given
+ image array. The client may still specify multiple frames even if
+ this cap and/or static-image is missing, however the server is
+ free to ignore them and use only the primary frame.
+
+
+
+ "actions"
+
+ The server will provide the specified actions to the user. Even if
+ this cap is missing, actions may still be specified by the client,
+ however the server is free to ignore them.
+
+
+
+
+
+
+ New vendor-specific caps may be specified as long as they start with
+ "x-vendor". For instance,
+ "x-gnome-foo-cap". Capability names must not
+ contain spaces. They are limited to alpha-numeric characters and dashes
+ ("-").
+
+
+
+
+ org.freedesktop.Notifications.Notify
+
+
+ UINT32
+ org.freedesktop.Notifications.Notify
+
+ STRING_OR_NIL app_name
+ BYTE_ARRAY_OR_STRING_OR_NIL app_icon
+ UINT32_OR_NIL replaces_id
+ STRING_OR_NIL notification_type
+ BYTE urgency_level
+ STRING summary
+ STRING_OR_NIL body
+ ARRAY images
+ DICT_OR_NIL actions
+ DICT_OR_NIL hints
+ UINT32_OR_NIL expire_time
+
+
+
+ Sends a notification to the notification server.
+
+
+ Notify Parameters
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ app_name
+ STRING or NIL
+
+ The optional name of the application sending the notification.
+
+
+
+ app_icon
+ BYTE_ARRAY or STRING or NIL
+
+ The optional program icon of the calling application. This is in
+ the same format as an image frame. See .
+
+
+
+ replaces_id
+ UINT32 or NIL
+
+ The optional notification ID that this notification replaces. The
+ server must atomically (ie with no flicker or other visual cues)
+ replace the given notification with this one. This allows clients to
+ effectively modify the notification while it's active.
+
+
+
+ notification_type
+ STRING or NIL
+
+ The optional notification type ID, for potential server
+ categorization and logging purposes. See
+ .
+
+
+
+ urgency_level
+ BYTE
+ The urgency level. See .
+
+
+ summary
+ STRING
+ The summary text briefly describing the notification.
+
+
+ body
+ STRING or NIL
+ The optional detailed body text.
+
+
+ images
+ ARRAY or NIL
+
+ The optional array of images. See .
+
+
+
+ actions
+ DICT or NIL
+
+ A dictionary key of actions. Each key is the localized name of the
+ action, as it should appear to the user, and maps to a UINT32 value
+ containing a program-specific action code. This code will be reported
+ back to the program if the action is invoked by the user.
+
+
+
+ hints
+ DICT or NIL
+
+ Optional hints that can be passed to the server from the client
+ program. Although clients and servers should never assume each other
+ supports any specific hints, they can be used to pass along
+ information, such as the process PID or window ID, that the server
+ may be able to make use of. See .
+
+
+
+ expire_time
+ UINT32 or NIL
+
+ The notification time-out time, represented as UNIX-time (seconds
+ since the epoch). If this is NIL, the notification
+ will never time out, and will only be closed when an action is
+ invoked. If non-NIL, this will specify a time at which the notification
+ will be automatically closed. If zero, the server's default
+ expiration time will be used.
+
+
+
+
+
+
+ If replaces_id is NIL, the return value is a
+ UINT32 that represent the notification. It is unique, and will not be
+ reused unless a MAXINT number of notifications
+ have been generated. An acceptable implementation may just use an
+ incrementing counter for the ID. The returned ID is always greater than
+ zero. Servers must make sure not to return zero as an ID.
+
+
+ If replaces_id is not NIL, the returned value
+ is the same value as replaces_id.
+
+
+
+
+ org.freedesktop.Notifications.CloseNotification
+
+
+ void
+ org.freedesktop.Notifications.CloseNotification
+
+ UINT32 id
+
+
+
+ Causes a notification to be forcefully closed and removed from the user's
+ view. It can be used, for example, in the event that what the
+ notification pertains to is no longer relevant, or to cancel a
+ notification with no expiration time.
+
+
+ The NotificationClosed signal is emitted by this
+ method.
+
+
+ If the notification no longer exists, an empty D-BUS Error message is
+ sent back.
+
+
+
+
+ org.freedesktop.Notifications.GetServerInformation
+
+
+
+ void
+ org.freedesktop.Notifications.GetServerInformation
+
+ out STRING name
+ out STRING vendor
+ out STRING version
+
+
+
+ This message returns the information on the server. Specifically,
+ the server name, vendor, and version number.
+
+
+ GetServerInformation Return Values
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ name
+ STRING
+ The product name of the server.
+
+
+ vendor
+ STRING
+
+ The vendor name. For example, "KDE," "GNOME,"
+ "freedesktop.org," or "Microsoft."
+
+
+
+ version
+ STRING
+ The server's version number.
+
+
+
+
+
+
+
+
+ Signals
+
+
+ org.freedesktop.Notifications.NotificationClosed
+
+
+
+ org.freedesktop.Notifications.NotificationClosed
+
+ UINT32 id
+ UINT32 reason
+
+
+
+ A completed notification is one that has timed out, or has been
+ dismissed by the user.
+
+
+ NotificationClosed Parameters
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ id
+ UINT32
+ The ID of the notification that was closed.
+
+
+ reason
+ UINT32
+
+ The reason the notification was closed.
+ 1 - The notification expired.
+ 2 - The notification was dismissed by the user.
+ 3 - The notification was closed by a call to
+ CloseNotification.
+ 4 - Undefined/reserved reasons.
+
+
+
+
+
+
+ The ID specified in the signal is invalidated
+ before the signal is sent and may not be used
+ in any further communications with the server.
+
+
+
+
+ org.freedesktop.Notifications.ActionInvoked
+
+
+
+ org.freedesktop.Notifications.ActionInvoked
+
+ UINT32 id
+
+ UINT32 action_id
+
+
+
+ This signal is emitted when one of the following occurs:
+
+
+
+
+ The user performs some global "invoking" action upon a notification.
+ For instance, clicking somewhere on the notification itself.
+
+
+
+
+ The user invokes a specific action as specified in the original
+ Notify request. For example, clicking on an action button.
+
+
+
+
+ ActionInvoked Parameters
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ id
+ UINT32
+
+ The ID of the notification emitting the ActionInvoked signal.
+
+
+
+
+ action_id
+ UINT32
+
+ The ID of the action invoked. A value of 0 means that the default
+ action was invoked, i.e., clicking the notification itself.
+ IDs greater than zero are the action IDs as defined by the
+ calling application.
+
+
+
+
+
+
+
+
+ Clients should not assume the server will generate this signal. Some
+ servers may not support user interaction at all, or may not support
+ the concept of being able to "invoke" a notification.
+
+
+
+
+
+
diff --git a/docs/releases/notification-spec-0.4.xml b/docs/releases/notification-spec-0.4.xml
new file mode 100644
index 0000000..ffa63ab
--- /dev/null
+++ b/docs/releases/notification-spec-0.4.xml
@@ -0,0 +1,1177 @@
+
+
+
+
+
+
+ Desktop Notifications Specification
+ Version 0.4
+ 29 September 2004
+
+
+ Mike
+ Hearn
+
+
+ mike@navi.cx
+
+
+
+
+ Christian
+ Hammond
+
+
+ chipx86@chipx86.com
+
+
+
+
+
+
+ 0.4
+ 29 September 2004
+ cdh
+
+ Added image support in markup, and made the restrictions on markup more
+ clear. Removed the High urgency. Added new notification types. Fixed
+ notification expiration.
+
+
+ 0.3
+ 15 September 2004
+ cdh
+ Added hint and notification type sections
+
+
+ 0.2
+ foo
+ mh
+ Added replaces field to protocol
+
+
+ 0.1
+ foo
+ mh
+ Initial version
+
+
+
+
+
+ Introduction
+
+ This is a draft standard for a desktop notifications service, through
+ which applications can generate passive popups (sometimes known as
+ "poptarts") to notify the user in an asynchronous manner of events.
+
+
+ This specification explicitly does not include other types of
+ notification presentation such as modal message boxes, window manager
+ decorations or window list annotations.
+
+
+ Example use cases include:
+
+
+
+
+ Presence changes in IM programs: for instance, MSN Messenger on
+ Windows pioneered the use of passive popups to indicate presence
+ changes.
+
+
+ Scheduled alarm
+ Completed file transfer
+ New mail notification
+ Low disk space/battery warnings
+
+
+
+
+ Basic Design
+
+ In order to ensure that multiple notifications can easily be
+ displayed at once, and to provide a convenient implementation, all
+ notifications are controlled by a single session-scoped service which
+ exposes a D-BUS interface.
+
+
+ On startup, a conforming implementation should take the
+ org.freedesktop.Notifications service on
+ the session bus. This service will be referred to as the "notification
+ server" or just "the server" in this document. It can optionally be
+ activated automatically by the bus process, however this is not required
+ and notification server clients must not assume that it is available.
+
+
+ The server should implement the
+ org.freedesktop.Notifications interface on
+ an object with the path "/org/freedesktop/Notifications".
+ This is the only interface required by this version of the specification.
+
+
+ A notification has the following components:
+
+
+ Notification Components
+
+
+
+ Component
+ Description
+
+
+
+
+ Application Name
+
+ This is the optional name of the application sending the notification.
+ This should be the application's formal name, rather than some sort
+ of ID. An example would be "FredApp E-Mail Client," rather than
+ "fredapp-email-client."
+
+
+
+ Application Icon
+
+ The application icon. This is represented either as a path or a name
+ in an icon theme.
+
+
+
+ Replaces ID
+
+ An optional ID of an existing notification that this
+ notification is intended to replace.
+
+
+
+ Notification Type ID
+
+ An optional ID representing the notification type. See
+ .
+
+
+
+ Urgency Level
+
+ The urgency of the notification. See .
+
+
+
+ Summary
+
+ This is a single line overview of the notification. For instance,
+ "You have mail" or "A friend has come online". It should generally
+ not be longer than 40 characters, though this is not a requirement,
+ and server implementations should word wrap if necessary. The summary
+ must be encoded using UTF-8.
+
+
+
+ Body
+
+
+ This is a multi-line body of text. Each line is a paragraph, server
+ implementations are free to word wrap them as they see fit.
+
+
+ The body may contain simple markup as specified in
+ . It must be encoded using UTF-8.
+
+
+ If the body is omitted, just the summary is displayed.
+
+
+
+
+ Images
+ See .
+
+
+ Actions
+
+ The actions send a request message back to the notification client
+ when invoked. This functionality may not be implemented by the
+ notification server, conforming clients should check if it is available
+ before using it (see the GetCapabilities message in
+ . An implementation is free to ignore any
+ requested by the client. As an example one possible rendering of
+ actions would be as buttons in the notification popup.
+
+
+
+ Hints
+ See .
+
+
+ Expires
+
+
+ A boolean flag indicating whether or not this notification should
+ automatically expire.
+
+
+
+
+ Expiration Timeout
+
+
+ The timeout time in seconds since the display of the notification at
+ which the notification should automatically close. This is ignored
+ if the expires flag is set to false.
+
+
+ If zero, the notification's expiration time is dependent on the
+ notification server's settings, and may vary for the type of
+ notification.
+
+
+
+
+
+
+
+ Each notification displayed is allocated a unique ID by the server.
+ This is unique within the session. While the notification server is
+ running, the ID will not be recycled unless the capacity of a uint32 is
+ exceeded.
+
+
+ This can be used to hide the notification before the expiration timeout
+ is reached. It can also be used to atomically replace the notification
+ with another. This allows you to (for instance) modify the contents of
+ a notification while it's on-screen.
+
+
+
+
+ Backwards Compatibility
+
+ Clients should try and avoid making assumptions about the presentation and
+ abilities of the notification server. The message content is the most
+ important thing.
+
+
+ Clients can check with the server what capabilities are supported
+ using the GetCapabilities message. See
+ .
+
+
+ If a client requires a response from a passive popup, it should be
+ coded such that a non-focus-stealing message box can be used in the
+ case that the notification server does not support this feature.
+
+
+
+
+ Markup
+
+ Body text may contain markup. The markup is XML-based, and consists
+ of a small subset of HTML along with a few additional tags.
+
+
+ The following tags should be supported by the notification server.
+ Though it is optional, it is recommended. Notification servers that do
+ not support these tags should filter them out.
+
+
+
+
+
+
+ b ...
+ b
+
+ Bold
+
+
+
+ i ...
+ i
+
+ Italic
+
+
+
+ u ...
+ u
+
+ Underline
+
+
+
+ a href="..." ...
+ a
+
+ Hyperlink
+
+
+
+ img src="..." alt="..."
+
+ Image
+
+
+
+
+
+ A full-blown HTML implementation is not required of this spec, and
+ notifications should never take advantage of tags that are not listed
+ above. As notifications are not a substitute for web browsers or complex
+ dialogs, advanced layout is not necessary, and may in fact limit the
+ number of systems that notification services can run on, due to memory
+ usage and screen space. Such examples are PDAs, certain cell phones, and
+ slow PCs or laptops with little memory.
+
+
+ For the same reason, a full XML or XHTML implementation using XSLT or
+ CSS stylesheets is not part of this specification. Information that
+ must be presented in a more complex form should use an application-specific
+ dialog, a web browser, or some other display mechanism.
+
+
+ The tags specified above mark up the content in a way that allows them
+ to be stripped out on some implementations without impacting the actual
+ content.
+
+
+
+ Hyperlinks
+
+ Hyperlinks allow for linking one or more words to a URI. There is no
+ requirement to allow for images to be linked, and it is highly suggested
+ that implementations do not allow this, as there is no clean-looking,
+ standard visual indicator for a hyperlinked image.
+
+
+ Hyperlinked text should appear in the standard blue underline format.
+
+
+ Hyperlinks cannot function as a replacement for actions. They are
+ used to link to local directories or remote sites using standard URI
+ schemes.
+
+
+ Implementations are not required to support hyperlinks.
+
+
+
+
+ Images
+
+ Images may be placed in the notification, but this should be done with
+ caution. The image should never exceed 200x100, but this should be thought
+ of as a maximum size. Images should always have alternative text
+ provided through the alt="..." attribute.
+
+
+ Image data cannot be embedded in the message itself. Images referenced
+ must always be local files.
+
+
+ Implementations are not required to support images.
+
+
+
+
+
+ Icons
+
+ A notification can optionally include an array of images for use as an
+ icon representing the notification. The array of images specifies frames
+ in an animation, which always loop. Implementations are free to ignore the
+ images data, and implementations that support images need not support
+ animation.
+
+
+ If the image array has more than one element, a "primary frame" can
+ be specified. If not specified, it defaults to the first frame. For
+ implementations that support images but not animation, only the primary
+ frame will be used.
+
+
+ Each element of the array must have the same type as the first
+ element. Mixtures of strings and blobs are not allowed. The element
+ types can be one of the following:
+
+
+
+
+
+ Element
+ Type
+ Description
+
+
+
+
+ Icon Theme Name
+ String
+
+ Any string that does not begin with the /
+ character is assumed to be an icon theme name and is looked up
+ according to the spec. The best size to fit the servers chosen
+ presentation will be used. This is the recommended way of specifying
+ images.
+
+
+
+ Absolute Path
+ String
+
+ Any string that begins with a / will be used as
+ an absolute file path. Implementations should support at minimum
+ files of type image/png and image/svg.
+
+
+
+ Image Data
+ Binary Data
+
+ A data stream may be embedded in the message. This is assumed to be
+ of type image/png.
+
+
+
+
+
+
+
+
+ Notification Types
+
+ Notifications can optionally have a type indicator. Although neither
+ client or nor server must support this, some may choose to. Those servers
+ implementing notification types may use them to intelligently display
+ the notification in a certain way, or group notifications of similar
+ types.
+
+
+ Notification types are in
+ class.specific form.
+ class specifies the generic type of notification, and
+ specific specifies the more specific type of
+ notification.
+
+
+ If a specific type of notification does not exist for your notification,
+ but the generic kind does, a notification of type
+ class is acceptable.
+
+
+ Third parties, when defining their own notification types, should discuss
+ the possibility of standardizing on the hint with other parties, preferably
+ in a place such as the
+ xdg
+ mailing list at
+ freedesktop.org. If it
+ warrants a standard, it will be added to the table above. If no
+ consensus is reached, the notification type should be in the form of
+ "x-vendor.class.name."
+
+
+ The following table lists standard notifications as defined by this spec.
+ More will be added in time.
+
+
+ Notification Types
+
+
+
+ Type
+ Description
+
+
+
+
+ "device"
+
+ A generic device-related notification that doesn't fit into
+ any other category.
+
+
+
+ "device.added"
+ A device, such as a USB device, was added to the system.
+
+
+ "device.error"
+ A device had some kind of error.
+
+
+ "device.removed"
+
+ A device, such as a USB device, was removed from the system.
+
+
+
+ "email"
+
+ A generic e-mail-related notification that doesn't fit into any
+ other category.
+
+
+
+ "email.arrived"
+ A new e-mail notification.
+
+
+ "email.bounced"
+ A notification stating that an e-mail has bounced.
+
+
+ "im"
+
+ A generic instant message-related notification that doesn't fit
+ into any other category.
+
+
+
+ "im.error"
+ An instant message error notification.
+
+
+ "im.received"
+ A received instant message notification.
+
+
+ "network"
+
+ A generic network notification that doesn't fit into any other
+ category.
+
+
+
+ "network.connected"
+
+ A network connection notification, such as successful sign-on to a
+ network service. This should not be confused with
+ device.added for new network devices.
+
+
+
+ "network.disconnected"
+
+ A network disconnected notification. This should not be confused with
+ device.removed for disconnected network devices.
+
+
+
+ "network.error"
+
+ A network-related or connection-related error.
+
+
+
+ "presence"
+
+ A generic presence change notification that doesn't fit into
+ any other category, such as going away or idle.
+
+
+
+ "presence.offline"
+ An offline presence change notification.
+
+
+ "presence.online"
+ An online presence change notification.
+
+
+ "transfer"
+
+ A generic file transfer or download notification that doesn't fit
+ into any other category.
+
+
+
+ "transfer.complete"
+ A file transfer or download complete notification.
+
+
+ "transfer.error"
+ A file transfer or download error.
+
+
+
+
+
+
+
+ Urgency Levels
+
+ Notifications have an urgency level associated with them. This defines
+ the importance of the notification. For example, "Joe Bob signed on"
+ would be a low urgency. "You have new mail" or "A USB device was unplugged"
+ would be a normal urgency. "Your computer is on fire" would be a critical
+ urgency.
+
+ Urgency levels are defined as follows:
+
+ Urgency Levels
+
+
+
+ Type
+ Description
+
+
+
+
+ 0
+ Low
+
+
+ 1
+ Normal
+
+
+ 2
+ Critical
+
+
+
+
+
+ Developers must use their own judgement when deciding the urgency of a
+ notification. Typically, if the majority of programs are using the same
+ level for a specific type of urgency, other applications should follow
+ them.
+
+
+ For low and normal urgencies, server implementations may display the
+ notifications how they choose. They should, however, have a sane
+ expiration timeout dependent on the urgency level.
+
+
+ Critical notifications should not automatically expire, as they are
+ things that the user will most likely want to know about. They should
+ only be closed when the user dismisses them, for example, by clicking on
+ the notification.
+
+
+
+
+ Hints
+
+ Hints are a way to provide extra data to a notification server that
+ the server may be able to make use of.
+
+
+ Neither clients nor notification servers are required to support any
+ hints. Both sides should assume that hints are not passed, and should
+ ignore any hints they do not understand.
+
+
+ Third parties, when defining their own hints, should discuss the
+ possibility of standardizing on the hint with other parties, preferably
+ in a place such as the
+ xdg
+ mailing list at
+ freedesktop.org. If it
+ warrants a standard, it will be added to the table above. If no
+ consensus is reached, the hint name should be in the form of
+ "x-vendor-name."
+
+
+ The following table lists the standard hints as defined by this
+ specification. Future hints may be proposed and added to this list
+ over time. Once again, implementations are not required to support these.
+
+
+ Standard Hints
+
+
+
+ Name
+ Value Type
+ Description
+
+
+
+
+ "soundfile"
+ string
+
+ The path to a sound file to play when the notification pops up.
+
+
+
+
+
+
+
+
+ D-BUS Protocol
+
+ The following messages must be supported by all
+ implementations.
+
+
+
+ Message commands
+
+
+ org.freedesktop.Notifications.GetCapabilities
+
+
+ STRING_ARRAY
+ org.freedesktop.Notifications.GetCapabilities
+
+
+
+
+
+ This message takes no parameters.
+
+
+ It returns an array of strings. Each string describes an optional
+ capability implemented by the server. The following values are
+ defined by this spec:
+
+
+ Server Capabilities
+
+
+
+ "actions"
+
+ The server will provide the specified actions to the user. Even if
+ this cap is missing, actions may still be specified by the client,
+ however the server is free to ignore them.
+
+
+
+ "body"
+
+ Supports body text. Some implementations may only show the
+ summary (for instance, onscreen displays, marquee/scrollers)
+
+
+
+ "body-hyperlinks"
+
+ The server supports hyperlinks in the notifications.
+
+
+
+ "body-images"
+
+ The server supports images in the notifications.
+
+
+
+ "body-markup"
+
+ Supports markup in the body text. If marked up text is sent
+ to a server that does not give this cap, the markup will show
+ through as regular text so must be stripped clientside.
+
+
+
+ "icon-multi"
+
+ The server will render an animation of all the frames in a given
+ image array. The client may still specify multiple frames even if
+ this cap and/or "icon-static" is missing, however
+ the server is free to ignore them and use only the primary frame.
+
+
+
+ "icon-static"
+
+ Supports display of exactly 1 frame of any given image array.
+ This value is mutually exclusive with
+ "icon-multi", it is a protocol error for the
+ server to specify both.
+
+
+
+
+
+
+ New vendor-specific caps may be specified as long as they start with
+ "x-vendor". For instance,
+ "x-gnome-foo-cap". Capability names must not
+ contain spaces. They are limited to alpha-numeric characters and dashes
+ ("-").
+
+
+
+
+ org.freedesktop.Notifications.Notify
+
+
+ UINT32
+ org.freedesktop.Notifications.Notify
+
+ STRING_OR_NIL app_name
+ BYTE_ARRAY_OR_STRING_OR_NIL app_icon
+ UINT32_OR_NIL replaces_id
+ STRING_OR_NIL notification_type
+ BYTE urgency_level
+ STRING summary
+ STRING_OR_NIL body
+ ARRAY images
+ DICT_OR_NIL actions
+ DICT_OR_NIL hints
+ BOOL expires
+ UINT32 expire_timeout
+
+
+
+ Sends a notification to the notification server.
+
+
+ Notify Parameters
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ app_name
+ STRING or NIL
+
+ The optional name of the application sending the notification.
+
+
+
+ app_icon
+ BYTE_ARRAY or STRING or NIL
+
+ The optional program icon of the calling application. This is in
+ the same format as an image frame. See .
+
+
+
+ replaces_id
+ UINT32 or NIL
+
+ The optional notification ID that this notification replaces. The
+ server must atomically (ie with no flicker or other visual cues)
+ replace the given notification with this one. This allows clients to
+ effectively modify the notification while it's active.
+
+
+
+ notification_type
+ STRING or NIL
+
+ The optional notification type ID, for potential server
+ categorization and logging purposes. See
+ .
+
+
+
+ urgency_level
+ BYTE
+ The urgency level. See .
+
+
+ summary
+ STRING
+ The summary text briefly describing the notification.
+
+
+ body
+ STRING or NIL
+ The optional detailed body text.
+
+
+ images
+ ARRAY or NIL
+
+ The optional array of images. See .
+
+
+
+ actions
+ DICT or NIL
+
+ A dictionary key of actions. Each key is the localized name of the
+ action, as it should appear to the user, and maps to a UINT32 value
+ containing a program-specific action code. This code will be reported
+ back to the program if the action is invoked by the user.
+
+
+
+ hints
+ DICT or NIL
+
+ Optional hints that can be passed to the server from the client
+ program. Although clients and servers should never assume each other
+ supports any specific hints, they can be used to pass along
+ information, such as the process PID or window ID, that the server
+ may be able to make use of. See .
+
+
+
+ expires
+ BOOL
+
+ A boolean flag indicating whether or not this notification should
+ automatically expire.
+
+
+
+ expire_timeout
+ UINT32
+
+
+ The timeout time in seconds since the display of the notification at
+ which the notification should automatically close. This is ignored
+ if the expires flag is set to false.
+
+
+ If zero, the notification's expiration time is dependent on the
+ notification server's settings, and may vary for the type of
+ notification.
+
+
+
+
+
+
+
+ If replaces_id is NIL, the return value is a
+ UINT32 that represent the notification. It is unique, and will not be
+ reused unless a MAXINT number of notifications
+ have been generated. An acceptable implementation may just use an
+ incrementing counter for the ID. The returned ID is always greater than
+ zero. Servers must make sure not to return zero as an ID.
+
+
+ If replaces_id is not NIL, the returned value
+ is the same value as replaces_id.
+
+
+
+
+ org.freedesktop.Notifications.CloseNotification
+
+
+ void
+ org.freedesktop.Notifications.CloseNotification
+
+ UINT32 id
+
+
+
+ Causes a notification to be forcefully closed and removed from the user's
+ view. It can be used, for example, in the event that what the
+ notification pertains to is no longer relevant, or to cancel a
+ notification with no expiration time.
+
+
+ The NotificationClosed signal is emitted by this
+ method.
+
+
+ If the notification no longer exists, an empty D-BUS Error message is
+ sent back.
+
+
+
+
+ org.freedesktop.Notifications.GetServerInformation
+
+
+
+ void
+ org.freedesktop.Notifications.GetServerInformation
+
+ out STRING name
+ out STRING vendor
+ out STRING version
+
+
+
+ This message returns the information on the server. Specifically,
+ the server name, vendor, and version number.
+
+
+ GetServerInformation Return Values
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ name
+ STRING
+ The product name of the server.
+
+
+ vendor
+ STRING
+
+ The vendor name. For example, "KDE," "GNOME,"
+ "freedesktop.org," or "Microsoft."
+
+
+
+ version
+ STRING
+ The server's version number.
+
+
+
+
+
+
+
+
+ Signals
+
+
+ org.freedesktop.Notifications.NotificationClosed
+
+
+
+ org.freedesktop.Notifications.NotificationClosed
+
+ UINT32 id
+ UINT32 reason
+
+
+
+ A completed notification is one that has timed out, or has been
+ dismissed by the user.
+
+
+ NotificationClosed Parameters
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ id
+ UINT32
+ The ID of the notification that was closed.
+
+
+ reason
+ UINT32
+
+ The reason the notification was closed.
+ 1 - The notification expired.
+ 2 - The notification was dismissed by the user.
+ 3 - The notification was closed by a call to
+ CloseNotification.
+ 4 - Undefined/reserved reasons.
+
+
+
+
+
+
+ The ID specified in the signal is invalidated
+ before the signal is sent and may not be used
+ in any further communications with the server.
+
+
+
+
+ org.freedesktop.Notifications.ActionInvoked
+
+
+
+ org.freedesktop.Notifications.ActionInvoked
+
+ UINT32 id
+
+ UINT32 action_id
+
+
+
+ This signal is emitted when one of the following occurs:
+
+
+
+
+ The user performs some global "invoking" action upon a notification.
+ For instance, clicking somewhere on the notification itself.
+
+
+
+
+ The user invokes a specific action as specified in the original
+ Notify request. For example, clicking on an action button.
+
+
+
+
+ ActionInvoked Parameters
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ id
+ UINT32
+
+ The ID of the notification emitting the ActionInvoked signal.
+
+
+
+
+ action_id
+ UINT32
+
+ The ID of the action invoked. A value of 0 means that the default
+ action was invoked, i.e., clicking the notification itself.
+ IDs greater than zero are the action IDs as defined by the
+ calling application.
+
+
+
+
+
+
+
+
+ Clients should not assume the server will generate this signal. Some
+ servers may not support user interaction at all, or may not support
+ the concept of being able to "invoke" a notification.
+
+
+
+
+
+
diff --git a/docs/releases/notification-spec-0.6.xml b/docs/releases/notification-spec-0.6.xml
new file mode 100644
index 0000000..484a212
--- /dev/null
+++ b/docs/releases/notification-spec-0.6.xml
@@ -0,0 +1,1219 @@
+
+
+
+
+
+
+ Desktop Notifications Specification
+ Version 0.5
+ 2 October 2004
+
+
+ Mike
+ Hearn
+
+
+ mike@navi.cx
+
+
+
+
+ Christian
+ Hammond
+
+
+ chipx86@chipx86.com
+
+
+
+
+
+
+ 0.6
+ 1 April 2005
+ cdh
+
+ Updated to work with D-BUS 0.31+.
+
+
+
+ 0.5
+ 2 October 2004
+ cdh
+
+ Added a "suppress-sound" hint. Added a "sound" capability. Renamed the
+ "soundfile" hint to sound-file".
+
+
+
+ 0.4
+ 29 September 2004
+ cdh
+
+ Added image support in markup, and made the restrictions on markup more
+ clear. Removed the High urgency. Added new notification types. Fixed
+ notification expiration.
+
+
+
+ 0.3
+ 15 September 2004
+ cdh
+ Added hint and notification type sections
+
+
+ 0.2
+ foo
+ mh
+ Added replaces field to protocol
+
+
+ 0.1
+ foo
+ mh
+ Initial version
+
+
+
+
+
+ Introduction
+
+ This is a draft standard for a desktop notifications service, through
+ which applications can generate passive popups (sometimes known as
+ "poptarts") to notify the user in an asynchronous manner of events.
+
+
+ This specification explicitly does not include other types of
+ notification presentation such as modal message boxes, window manager
+ decorations or window list annotations.
+
+
+ Example use cases include:
+
+
+
+
+ Presence changes in IM programs: for instance, MSN Messenger on
+ Windows pioneered the use of passive popups to indicate presence
+ changes.
+
+
+ Scheduled alarm
+ Completed file transfer
+ New mail notification
+ Low disk space/battery warnings
+
+
+
+
+ Basic Design
+
+ In order to ensure that multiple notifications can easily be
+ displayed at once, and to provide a convenient implementation, all
+ notifications are controlled by a single session-scoped service which
+ exposes a D-BUS interface.
+
+
+ On startup, a conforming implementation should take the
+ org.freedesktop.Notifications service on
+ the session bus. This service will be referred to as the "notification
+ server" or just "the server" in this document. It can optionally be
+ activated automatically by the bus process, however this is not required
+ and notification server clients must not assume that it is available.
+
+
+ The server should implement the
+ org.freedesktop.Notifications interface on
+ an object with the path "/org/freedesktop/Notifications".
+ This is the only interface required by this version of the specification.
+
+
+ A notification has the following components:
+
+
+ Notification Components
+
+
+
+ Component
+ Description
+
+
+
+
+ Application Name
+
+ This is the optional name of the application sending the notification.
+ This should be the application's formal name, rather than some sort
+ of ID. An example would be "FredApp E-Mail Client," rather than
+ "fredapp-email-client."
+
+
+
+ Application Icon
+
+ The application icon. This is represented either as a path or a name
+ in an icon theme.
+
+
+
+ Replaces ID
+
+ An optional ID of an existing notification that this
+ notification is intended to replace.
+
+
+
+ Notification Type ID
+
+ An optional ID representing the notification type. See
+ .
+
+
+
+ Urgency Level
+
+ The urgency of the notification. See .
+
+
+
+ Summary
+
+ This is a single line overview of the notification. For instance,
+ "You have mail" or "A friend has come online". It should generally
+ not be longer than 40 characters, though this is not a requirement,
+ and server implementations should word wrap if necessary. The summary
+ must be encoded using UTF-8.
+
+
+
+ Body
+
+
+ This is a multi-line body of text. Each line is a paragraph, server
+ implementations are free to word wrap them as they see fit.
+
+
+ The body may contain simple markup as specified in
+ . It must be encoded using UTF-8.
+
+
+ If the body is omitted, just the summary is displayed.
+
+
+
+
+ Images
+ See .
+
+
+ Actions
+
+ The actions send a request message back to the notification client
+ when invoked. This functionality may not be implemented by the
+ notification server, conforming clients should check if it is available
+ before using it (see the GetCapabilities message in
+ . An implementation is free to ignore any
+ requested by the client. As an example one possible rendering of
+ actions would be as buttons in the notification popup.
+
+
+
+ Hints
+ See .
+
+
+ Expires
+
+
+ A boolean flag indicating whether or not this notification should
+ automatically expire.
+
+
+
+
+ Expiration Timeout
+
+
+ The timeout time in seconds since the display of the notification at
+ which the notification should automatically close. This is ignored
+ if the expires flag is set to false.
+
+
+ If zero, the notification's expiration time is dependent on the
+ notification server's settings, and may vary for the type of
+ notification.
+
+
+
+
+
+
+
+ Each notification displayed is allocated a unique ID by the server.
+ This is unique within the session. While the notification server is
+ running, the ID will not be recycled unless the capacity of a uint32 is
+ exceeded.
+
+
+ This can be used to hide the notification before the expiration timeout
+ is reached. It can also be used to atomically replace the notification
+ with another. This allows you to (for instance) modify the contents of
+ a notification while it's on-screen.
+
+
+
+
+ Backwards Compatibility
+
+ Clients should try and avoid making assumptions about the presentation and
+ abilities of the notification server. The message content is the most
+ important thing.
+
+
+ Clients can check with the server what capabilities are supported
+ using the GetCapabilities message. See
+ .
+
+
+ If a client requires a response from a passive popup, it should be
+ coded such that a non-focus-stealing message box can be used in the
+ case that the notification server does not support this feature.
+
+
+
+
+ Markup
+
+ Body text may contain markup. The markup is XML-based, and consists
+ of a small subset of HTML along with a few additional tags.
+
+
+ The following tags should be supported by the notification server.
+ Though it is optional, it is recommended. Notification servers that do
+ not support these tags should filter them out.
+
+
+
+
+
+
+ b ...
+ b
+
+ Bold
+
+
+
+ i ...
+ i
+
+ Italic
+
+
+
+ u ...
+ u
+
+ Underline
+
+
+
+ a href="..." ...
+ a
+
+ Hyperlink
+
+
+
+ img src="..." alt="..."
+
+ Image
+
+
+
+
+
+ A full-blown HTML implementation is not required of this spec, and
+ notifications should never take advantage of tags that are not listed
+ above. As notifications are not a substitute for web browsers or complex
+ dialogs, advanced layout is not necessary, and may in fact limit the
+ number of systems that notification services can run on, due to memory
+ usage and screen space. Such examples are PDAs, certain cell phones, and
+ slow PCs or laptops with little memory.
+
+
+ For the same reason, a full XML or XHTML implementation using XSLT or
+ CSS stylesheets is not part of this specification. Information that
+ must be presented in a more complex form should use an application-specific
+ dialog, a web browser, or some other display mechanism.
+
+
+ The tags specified above mark up the content in a way that allows them
+ to be stripped out on some implementations without impacting the actual
+ content.
+
+
+
+ Hyperlinks
+
+ Hyperlinks allow for linking one or more words to a URI. There is no
+ requirement to allow for images to be linked, and it is highly suggested
+ that implementations do not allow this, as there is no clean-looking,
+ standard visual indicator for a hyperlinked image.
+
+
+ Hyperlinked text should appear in the standard blue underline format.
+
+
+ Hyperlinks cannot function as a replacement for actions. They are
+ used to link to local directories or remote sites using standard URI
+ schemes.
+
+
+ Implementations are not required to support hyperlinks.
+
+
+
+
+ Images
+
+ Images may be placed in the notification, but this should be done with
+ caution. The image should never exceed 200x100, but this should be thought
+ of as a maximum size. Images should always have alternative text
+ provided through the alt="..." attribute.
+
+
+ Image data cannot be embedded in the message itself. Images referenced
+ must always be local files.
+
+
+ Implementations are not required to support images.
+
+
+
+
+
+ Icons
+
+ A notification can optionally include an array of images for use as an
+ icon representing the notification. The array of images specifies frames
+ in an animation, which always loop. Implementations are free to ignore the
+ images data, and implementations that support images need not support
+ animation.
+
+
+ If the image array has more than one element, a "primary frame" can
+ be specified. If not specified, it defaults to the first frame. For
+ implementations that support images but not animation, only the primary
+ frame will be used.
+
+
+ Each element of the array must have the same type as the first
+ element. Mixtures of strings and blobs are not allowed. The element
+ types can be one of the following:
+
+
+
+
+
+ Element
+ Type
+ Description
+
+
+
+
+ Icon Theme Name
+ String
+
+ Any string that does not begin with the /
+ character is assumed to be an icon theme name and is looked up
+ according to the spec. The best size to fit the servers chosen
+ presentation will be used. This is the recommended way of specifying
+ images.
+
+
+
+ Absolute Path
+ String
+
+ Any string that begins with a / will be used as
+ an absolute file path. Implementations should support at minimum
+ files of type image/png and image/svg.
+
+
+
+ Image Data
+ Binary Data
+
+ A data stream may be embedded in the message. This is assumed to be
+ of type image/png.
+
+
+
+
+
+
+
+
+ Notification Types
+
+ Notifications can optionally have a type indicator. Although neither
+ client or nor server must support this, some may choose to. Those servers
+ implementing notification types may use them to intelligently display
+ the notification in a certain way, or group notifications of similar
+ types.
+
+
+ Notification types are in
+ class.specific form.
+ class specifies the generic type of notification, and
+ specific specifies the more specific type of
+ notification.
+
+
+ If a specific type of notification does not exist for your notification,
+ but the generic kind does, a notification of type
+ class is acceptable.
+
+
+ Third parties, when defining their own notification types, should discuss
+ the possibility of standardizing on the hint with other parties, preferably
+ in a place such as the
+ xdg
+ mailing list at
+ freedesktop.org. If it
+ warrants a standard, it will be added to the table above. If no
+ consensus is reached, the notification type should be in the form of
+ "x-vendor.class.name."
+
+
+ The following table lists standard notifications as defined by this spec.
+ More will be added in time.
+
+
+ Notification Types
+
+
+
+ Type
+ Description
+
+
+
+
+ "device"
+
+ A generic device-related notification that doesn't fit into
+ any other category.
+
+
+
+ "device.added"
+ A device, such as a USB device, was added to the system.
+
+
+ "device.error"
+ A device had some kind of error.
+
+
+ "device.removed"
+
+ A device, such as a USB device, was removed from the system.
+
+
+
+ "email"
+
+ A generic e-mail-related notification that doesn't fit into any
+ other category.
+
+
+
+ "email.arrived"
+ A new e-mail notification.
+
+
+ "email.bounced"
+ A notification stating that an e-mail has bounced.
+
+
+ "im"
+
+ A generic instant message-related notification that doesn't fit
+ into any other category.
+
+
+
+ "im.error"
+ An instant message error notification.
+
+
+ "im.received"
+ A received instant message notification.
+
+
+ "network"
+
+ A generic network notification that doesn't fit into any other
+ category.
+
+
+
+ "network.connected"
+
+ A network connection notification, such as successful sign-on to a
+ network service. This should not be confused with
+ device.added for new network devices.
+
+
+
+ "network.disconnected"
+
+ A network disconnected notification. This should not be confused with
+ device.removed for disconnected network devices.
+
+
+
+ "network.error"
+
+ A network-related or connection-related error.
+
+
+
+ "presence"
+
+ A generic presence change notification that doesn't fit into
+ any other category, such as going away or idle.
+
+
+
+ "presence.offline"
+ An offline presence change notification.
+
+
+ "presence.online"
+ An online presence change notification.
+
+
+ "transfer"
+
+ A generic file transfer or download notification that doesn't fit
+ into any other category.
+
+
+
+ "transfer.complete"
+ A file transfer or download complete notification.
+
+
+ "transfer.error"
+ A file transfer or download error.
+
+
+
+
+
+
+
+ Urgency Levels
+
+ Notifications have an urgency level associated with them. This defines
+ the importance of the notification. For example, "Joe Bob signed on"
+ would be a low urgency. "You have new mail" or "A USB device was unplugged"
+ would be a normal urgency. "Your computer is on fire" would be a critical
+ urgency.
+
+ Urgency levels are defined as follows:
+
+ Urgency Levels
+
+
+
+ Type
+ Description
+
+
+
+
+ 0
+ Low
+
+
+ 1
+ Normal
+
+
+ 2
+ Critical
+
+
+
+
+
+ Developers must use their own judgement when deciding the urgency of a
+ notification. Typically, if the majority of programs are using the same
+ level for a specific type of urgency, other applications should follow
+ them.
+
+
+ For low and normal urgencies, server implementations may display the
+ notifications how they choose. They should, however, have a sane
+ expiration timeout dependent on the urgency level.
+
+
+ Critical notifications should not automatically expire, as they are
+ things that the user will most likely want to know about. They should
+ only be closed when the user dismisses them, for example, by clicking on
+ the notification.
+
+
+
+
+ Hints
+
+ Hints are a way to provide extra data to a notification server that
+ the server may be able to make use of.
+
+
+ Neither clients nor notification servers are required to support any
+ hints. Both sides should assume that hints are not passed, and should
+ ignore any hints they do not understand.
+
+
+ Third parties, when defining their own hints, should discuss the
+ possibility of standardizing on the hint with other parties, preferably
+ in a place such as the
+ xdg
+ mailing list at
+ freedesktop.org. If it
+ warrants a standard, it will be added to the table above. If no
+ consensus is reached, the hint name should be in the form of
+ "x-vendor-name."
+
+
+ The following table lists the standard hints as defined by this
+ specification. Future hints may be proposed and added to this list
+ over time. Once again, implementations are not required to support these.
+
+
+ Standard Hints
+
+
+
+ Name
+ Value Type
+ Description
+
+
+
+
+ "sound-file"
+ string
+
+ The path to a sound file to play when the notification pops up.
+
+
+
+ "suppress-sound"
+ boolean
+
+ Causes the server to suppress playing any sounds, if it has that
+ ability. This is usually set when the client itself is going to
+ play its own sound.
+
+
+
+
+
+
+
+
+ D-BUS Protocol
+
+ The following messages must be supported by all
+ implementations.
+
+
+
+ Message commands
+
+
+ org.freedesktop.Notifications.GetCapabilities
+
+
+ STRING_ARRAY
+ org.freedesktop.Notifications.GetCapabilities
+
+
+
+
+
+ This message takes no parameters.
+
+
+ It returns an array of strings. Each string describes an optional
+ capability implemented by the server. The following values are
+ defined by this spec:
+
+
+ Server Capabilities
+
+
+
+ "actions"
+
+ The server will provide the specified actions to the user. Even if
+ this cap is missing, actions may still be specified by the client,
+ however the server is free to ignore them.
+
+
+
+ "body"
+
+ Supports body text. Some implementations may only show the
+ summary (for instance, onscreen displays, marquee/scrollers)
+
+
+
+ "body-hyperlinks"
+
+ The server supports hyperlinks in the notifications.
+
+
+
+ "body-images"
+
+ The server supports images in the notifications.
+
+
+
+ "body-markup"
+
+ Supports markup in the body text. If marked up text is sent
+ to a server that does not give this cap, the markup will show
+ through as regular text so must be stripped clientside.
+
+
+
+ "icon-multi"
+
+ The server will render an animation of all the frames in a given
+ image array. The client may still specify multiple frames even if
+ this cap and/or "icon-static" is missing, however
+ the server is free to ignore them and use only the primary frame.
+
+
+
+ "icon-static"
+
+ Supports display of exactly 1 frame of any given image array.
+ This value is mutually exclusive with
+ "icon-multi", it is a protocol error for the
+ server to specify both.
+
+
+
+ "sound"
+
+ The server supports sounds on notifications. If returned, the
+ server must support the "sound-file" and
+ "suppress-sound" hints.
+
+
+
+
+
+
+ New vendor-specific caps may be specified as long as they start with
+ "x-vendor". For instance,
+ "x-gnome-foo-cap". Capability names must not
+ contain spaces. They are limited to alpha-numeric characters and dashes
+ ("-").
+
+
+
+
+ org.freedesktop.Notifications.Notify
+
+
+ UINT32
+ org.freedesktop.Notifications.Notify
+
+ STRING app_name
+ BYTE_ARRAY_OR_STRING app_icon
+ UINT32 replaces_id
+ STRING notification_type
+ BYTE urgency_level
+ STRING summary
+ STRING body
+ ARRAY images
+ DICT actions
+ DICT hints
+ BOOL expires
+ UINT32 expire_timeout
+
+
+
+ Sends a notification to the notification server.
+
+
+ Notify Parameters
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ app_name
+ STRING
+
+ The optional name of the application sending the notification.
+ Can be blank.
+
+
+
+ app_icon
+ BYTE_ARRAY or STRING
+
+ The optional program icon of the calling application. This is in
+ the same format as an image frame. See .
+ Can be an empty string, indicating no icon.
+
+
+
+ replaces_id
+ UINT32
+
+ The optional notification ID that this notification replaces. The
+ server must atomically (ie with no flicker or other visual cues)
+ replace the given notification with this one. This allows clients to
+ effectively modify the notification while it's active. A value of
+ value of 0 means that this notification won't replace any
+ existing notifications.
+
+
+
+ notification_type
+ STRING
+
+ The optional notification type ID, for potential server
+ categorization and logging purposes. See
+ . Can be empty.
+
+
+
+ urgency_level
+ BYTE
+ The urgency level. See .
+
+
+ summary
+ STRING
+ The summary text briefly describing the notification.
+
+
+ body
+ STRING
+ The optional detailed body text. Can be empty.
+
+
+ images
+ ARRAY
+
+ The optional array of images. See . Can
+ be empty.
+
+
+
+ actions
+ DICT
+
+ A dictionary key of actions. Each key is the localized name of the
+ action, as it should appear to the user, and maps to a UINT32 value
+ containing a program-specific action code. This code will be reported
+ back to the program if the action is invoked by the user. Can be
+ empty.
+
+
+
+ hints
+ DICT
+
+ Optional hints that can be passed to the server from the client
+ program. Although clients and servers should never assume each other
+ supports any specific hints, they can be used to pass along
+ information, such as the process PID or window ID, that the server
+ may be able to make use of. See . Can be
+ empty.
+
+
+
+ expires
+ BOOL
+
+ A boolean flag indicating whether or not this notification should
+ automatically expire.
+
+
+
+ expire_timeout
+ UINT32
+
+
+ The timeout time in seconds since the display of the notification at
+ which the notification should automatically close. This is ignored
+ if the expires flag is set to false.
+
+
+ If zero, the notification's expiration time is dependent on the
+ notification server's settings, and may vary for the type of
+ notification.
+
+
+
+
+
+
+
+ If replaces_id is 0, the return value is a
+ UINT32 that represent the notification. It is unique, and will not be
+ reused unless a MAXINT number of notifications
+ have been generated. An acceptable implementation may just use an
+ incrementing counter for the ID. The returned ID is always greater than
+ zero. Servers must make sure not to return zero as an ID.
+
+
+ If replaces_id is not 0, the returned value
+ is the same value as replaces_id.
+
+
+
+
+ org.freedesktop.Notifications.CloseNotification
+
+
+ void
+ org.freedesktop.Notifications.CloseNotification
+
+ UINT32 id
+
+
+
+ Causes a notification to be forcefully closed and removed from the user's
+ view. It can be used, for example, in the event that what the
+ notification pertains to is no longer relevant, or to cancel a
+ notification with no expiration time.
+
+
+ The NotificationClosed signal is emitted by this
+ method.
+
+
+ If the notification no longer exists, an empty D-BUS Error message is
+ sent back.
+
+
+
+
+ org.freedesktop.Notifications.GetServerInformation
+
+
+
+ void
+ org.freedesktop.Notifications.GetServerInformation
+
+ out STRING name
+ out STRING vendor
+ out STRING version
+
+
+
+ This message returns the information on the server. Specifically,
+ the server name, vendor, and version number.
+
+
+ GetServerInformation Return Values
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ name
+ STRING
+ The product name of the server.
+
+
+ vendor
+ STRING
+
+ The vendor name. For example, "KDE," "GNOME,"
+ "freedesktop.org," or "Microsoft."
+
+
+
+ version
+ STRING
+ The server's version number.
+
+
+
+
+
+
+
+
+ Signals
+
+
+ org.freedesktop.Notifications.NotificationClosed
+
+
+
+ org.freedesktop.Notifications.NotificationClosed
+
+ UINT32 id
+ UINT32 reason
+
+
+
+ A completed notification is one that has timed out, or has been
+ dismissed by the user.
+
+
+ NotificationClosed Parameters
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ id
+ UINT32
+ The ID of the notification that was closed.
+
+
+ reason
+ UINT32
+
+ The reason the notification was closed.
+ 1 - The notification expired.
+ 2 - The notification was dismissed by the user.
+ 3 - The notification was closed by a call to
+ CloseNotification.
+ 4 - Undefined/reserved reasons.
+
+
+
+
+
+
+ The ID specified in the signal is invalidated
+ before the signal is sent and may not be used
+ in any further communications with the server.
+
+
+
+
+ org.freedesktop.Notifications.ActionInvoked
+
+
+
+ org.freedesktop.Notifications.ActionInvoked
+
+ UINT32 id
+
+ UINT32 action_id
+
+
+
+ This signal is emitted when one of the following occurs:
+
+
+
+
+ The user performs some global "invoking" action upon a notification.
+ For instance, clicking somewhere on the notification itself.
+
+
+
+
+ The user invokes a specific action as specified in the original
+ Notify request. For example, clicking on an action button.
+
+
+
+
+ ActionInvoked Parameters
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ id
+ UINT32
+
+ The ID of the notification emitting the ActionInvoked signal.
+
+
+
+
+ action_id
+ UINT32
+
+ The ID of the action invoked. A value of 0 means that the default
+ action was invoked, i.e., clicking the notification itself.
+ IDs greater than zero are the action IDs as defined by the
+ calling application.
+
+
+
+
+
+
+
+
+ Clients should not assume the server will generate this signal. Some
+ servers may not support user interaction at all, or may not support
+ the concept of being able to "invoke" a notification.
+
+
+
+
+
+
diff --git a/docs/releases/notification-spec-0.7.xml b/docs/releases/notification-spec-0.7.xml
new file mode 100644
index 0000000..ab92488
--- /dev/null
+++ b/docs/releases/notification-spec-0.7.xml
@@ -0,0 +1,1250 @@
+
+
+
+
+
+
+ Desktop Notifications Specification
+ Version 0.7
+ 28 July 2005
+
+
+ Mike
+ Hearn
+
+
+ mike@navi.cx
+
+
+
+
+ Christian
+ Hammond
+
+
+ chipx86@chipx86.com
+
+
+
+
+
+
+ 0.7
+ 28 July 2005
+ cdh
+
+ Added "x" and "y" hints. Talk about the variant type for hint values.
+
+
+
+ 0.6
+ 1 April 2005
+ cdh
+
+ Updated to work with D-BUS 0.31+.
+
+
+
+ 0.5
+ 2 October 2004
+ cdh
+
+ Added a "suppress-sound" hint. Added a "sound" capability. Renamed the
+ "soundfile" hint to sound-file".
+
+
+
+ 0.4
+ 29 September 2004
+ cdh
+
+ Added image support in markup, and made the restrictions on markup more
+ clear. Removed the High urgency. Added new notification types. Fixed
+ notification expiration.
+
+
+
+ 0.3
+ 15 September 2004
+ cdh
+ Added hint and notification type sections
+
+
+ 0.2
+ foo
+ mh
+ Added replaces field to protocol
+
+
+ 0.1
+ foo
+ mh
+ Initial version
+
+
+
+
+
+ Introduction
+
+ This is a draft standard for a desktop notifications service, through
+ which applications can generate passive popups (sometimes known as
+ "poptarts") to notify the user in an asynchronous manner of events.
+
+
+ This specification explicitly does not include other types of
+ notification presentation such as modal message boxes, window manager
+ decorations or window list annotations.
+
+
+ Example use cases include:
+
+
+
+
+ Presence changes in IM programs: for instance, MSN Messenger on
+ Windows pioneered the use of passive popups to indicate presence
+ changes.
+
+
+ Scheduled alarm
+ Completed file transfer
+ New mail notification
+ Low disk space/battery warnings
+
+
+
+
+ Basic Design
+
+ In order to ensure that multiple notifications can easily be
+ displayed at once, and to provide a convenient implementation, all
+ notifications are controlled by a single session-scoped service which
+ exposes a D-BUS interface.
+
+
+ On startup, a conforming implementation should take the
+ org.freedesktop.Notifications service on
+ the session bus. This service will be referred to as the "notification
+ server" or just "the server" in this document. It can optionally be
+ activated automatically by the bus process, however this is not required
+ and notification server clients must not assume that it is available.
+
+
+ The server should implement the
+ org.freedesktop.Notifications interface on
+ an object with the path "/org/freedesktop/Notifications".
+ This is the only interface required by this version of the specification.
+
+
+ A notification has the following components:
+
+
+ Notification Components
+
+
+
+ Component
+ Description
+
+
+
+
+ Application Name
+
+ This is the optional name of the application sending the notification.
+ This should be the application's formal name, rather than some sort
+ of ID. An example would be "FredApp E-Mail Client," rather than
+ "fredapp-email-client."
+
+
+
+ Application Icon
+
+ The application icon. This is represented either as a path or a name
+ in an icon theme.
+
+
+
+ Replaces ID
+
+ An optional ID of an existing notification that this
+ notification is intended to replace.
+
+
+
+ Notification Type ID
+
+ An optional ID representing the notification type. See
+ .
+
+
+
+ Urgency Level
+
+ The urgency of the notification. See .
+
+
+
+ Summary
+
+ This is a single line overview of the notification. For instance,
+ "You have mail" or "A friend has come online". It should generally
+ not be longer than 40 characters, though this is not a requirement,
+ and server implementations should word wrap if necessary. The summary
+ must be encoded using UTF-8.
+
+
+
+ Body
+
+
+ This is a multi-line body of text. Each line is a paragraph, server
+ implementations are free to word wrap them as they see fit.
+
+
+ The body may contain simple markup as specified in
+ . It must be encoded using UTF-8.
+
+
+ If the body is omitted, just the summary is displayed.
+
+
+
+
+ Images
+ See .
+
+
+ Actions
+
+ The actions send a request message back to the notification client
+ when invoked. This functionality may not be implemented by the
+ notification server, conforming clients should check if it is available
+ before using it (see the GetCapabilities message in
+ . An implementation is free to ignore any
+ requested by the client. As an example one possible rendering of
+ actions would be as buttons in the notification popup.
+
+
+
+ Hints
+ See .
+
+
+ Expires
+
+
+ A boolean flag indicating whether or not this notification should
+ automatically expire.
+
+
+
+
+ Expiration Timeout
+
+
+ The timeout time in seconds since the display of the notification at
+ which the notification should automatically close. This is ignored
+ if the expires flag is set to false.
+
+
+ If zero, the notification's expiration time is dependent on the
+ notification server's settings, and may vary for the type of
+ notification.
+
+
+
+
+
+
+
+ Each notification displayed is allocated a unique ID by the server.
+ This is unique within the session. While the notification server is
+ running, the ID will not be recycled unless the capacity of a uint32 is
+ exceeded.
+
+
+ This can be used to hide the notification before the expiration timeout
+ is reached. It can also be used to atomically replace the notification
+ with another. This allows you to (for instance) modify the contents of
+ a notification while it's on-screen.
+
+
+
+
+ Backwards Compatibility
+
+ Clients should try and avoid making assumptions about the presentation and
+ abilities of the notification server. The message content is the most
+ important thing.
+
+
+ Clients can check with the server what capabilities are supported
+ using the GetCapabilities message. See
+ .
+
+
+ If a client requires a response from a passive popup, it should be
+ coded such that a non-focus-stealing message box can be used in the
+ case that the notification server does not support this feature.
+
+
+
+
+ Markup
+
+ Body text may contain markup. The markup is XML-based, and consists
+ of a small subset of HTML along with a few additional tags.
+
+
+ The following tags should be supported by the notification server.
+ Though it is optional, it is recommended. Notification servers that do
+ not support these tags should filter them out.
+
+
+
+
+
+
+ b ...
+ b
+
+ Bold
+
+
+
+ i ...
+ i
+
+ Italic
+
+
+
+ u ...
+ u
+
+ Underline
+
+
+
+ a href="..." ...
+ a
+
+ Hyperlink
+
+
+
+ img src="..." alt="..."
+
+ Image
+
+
+
+
+
+ A full-blown HTML implementation is not required of this spec, and
+ notifications should never take advantage of tags that are not listed
+ above. As notifications are not a substitute for web browsers or complex
+ dialogs, advanced layout is not necessary, and may in fact limit the
+ number of systems that notification services can run on, due to memory
+ usage and screen space. Such examples are PDAs, certain cell phones, and
+ slow PCs or laptops with little memory.
+
+
+ For the same reason, a full XML or XHTML implementation using XSLT or
+ CSS stylesheets is not part of this specification. Information that
+ must be presented in a more complex form should use an application-specific
+ dialog, a web browser, or some other display mechanism.
+
+
+ The tags specified above mark up the content in a way that allows them
+ to be stripped out on some implementations without impacting the actual
+ content.
+
+
+
+ Hyperlinks
+
+ Hyperlinks allow for linking one or more words to a URI. There is no
+ requirement to allow for images to be linked, and it is highly suggested
+ that implementations do not allow this, as there is no clean-looking,
+ standard visual indicator for a hyperlinked image.
+
+
+ Hyperlinked text should appear in the standard blue underline format.
+
+
+ Hyperlinks cannot function as a replacement for actions. They are
+ used to link to local directories or remote sites using standard URI
+ schemes.
+
+
+ Implementations are not required to support hyperlinks.
+
+
+
+
+ Images
+
+ Images may be placed in the notification, but this should be done with
+ caution. The image should never exceed 200x100, but this should be thought
+ of as a maximum size. Images should always have alternative text
+ provided through the alt="..." attribute.
+
+
+ Image data cannot be embedded in the message itself. Images referenced
+ must always be local files.
+
+
+ Implementations are not required to support images.
+
+
+
+
+
+ Icons
+
+ A notification can optionally include an array of images for use as an
+ icon representing the notification. The array of images specifies frames
+ in an animation, which always loop. Implementations are free to ignore the
+ images data, and implementations that support images need not support
+ animation.
+
+
+ If the image array has more than one element, a "primary frame" can
+ be specified. If not specified, it defaults to the first frame. For
+ implementations that support images but not animation, only the primary
+ frame will be used.
+
+
+ Each element of the array must have the same type as the first
+ element. Mixtures of strings and blobs are not allowed. The element
+ types can be one of the following:
+
+
+
+
+
+ Element
+ Type
+ Description
+
+
+
+
+ Icon Theme Name
+ String
+
+ Any string that does not begin with the /
+ character is assumed to be an icon theme name and is looked up
+ according to the spec. The best size to fit the servers chosen
+ presentation will be used. This is the recommended way of specifying
+ images.
+
+
+
+ Absolute Path
+ String
+
+ Any string that begins with a / will be used as
+ an absolute file path. Implementations should support at minimum
+ files of type image/png and image/svg.
+
+
+
+ Image Data
+ Binary Data
+
+ A data stream may be embedded in the message. This is assumed to be
+ of type image/png.
+
+
+
+
+
+
+
+
+ Notification Types
+
+ Notifications can optionally have a type indicator. Although neither
+ client or nor server must support this, some may choose to. Those servers
+ implementing notification types may use them to intelligently display
+ the notification in a certain way, or group notifications of similar
+ types.
+
+
+ Notification types are in
+ class.specific form.
+ class specifies the generic type of notification, and
+ specific specifies the more specific type of
+ notification.
+
+
+ If a specific type of notification does not exist for your notification,
+ but the generic kind does, a notification of type
+ class is acceptable.
+
+
+ Third parties, when defining their own notification types, should discuss
+ the possibility of standardizing on the hint with other parties, preferably
+ in a place such as the
+ xdg
+ mailing list at
+ freedesktop.org. If it
+ warrants a standard, it will be added to the table above. If no
+ consensus is reached, the notification type should be in the form of
+ "x-vendor.class.name."
+
+
+ The following table lists standard notifications as defined by this spec.
+ More will be added in time.
+
+
+ Notification Types
+
+
+
+ Type
+ Description
+
+
+
+
+ "device"
+
+ A generic device-related notification that doesn't fit into
+ any other category.
+
+
+
+ "device.added"
+ A device, such as a USB device, was added to the system.
+
+
+ "device.error"
+ A device had some kind of error.
+
+
+ "device.removed"
+
+ A device, such as a USB device, was removed from the system.
+
+
+
+ "email"
+
+ A generic e-mail-related notification that doesn't fit into any
+ other category.
+
+
+
+ "email.arrived"
+ A new e-mail notification.
+
+
+ "email.bounced"
+ A notification stating that an e-mail has bounced.
+
+
+ "im"
+
+ A generic instant message-related notification that doesn't fit
+ into any other category.
+
+
+
+ "im.error"
+ An instant message error notification.
+
+
+ "im.received"
+ A received instant message notification.
+
+
+ "network"
+
+ A generic network notification that doesn't fit into any other
+ category.
+
+
+
+ "network.connected"
+
+ A network connection notification, such as successful sign-on to a
+ network service. This should not be confused with
+ device.added for new network devices.
+
+
+
+ "network.disconnected"
+
+ A network disconnected notification. This should not be confused with
+ device.removed for disconnected network devices.
+
+
+
+ "network.error"
+
+ A network-related or connection-related error.
+
+
+
+ "presence"
+
+ A generic presence change notification that doesn't fit into
+ any other category, such as going away or idle.
+
+
+
+ "presence.offline"
+ An offline presence change notification.
+
+
+ "presence.online"
+ An online presence change notification.
+
+
+ "transfer"
+
+ A generic file transfer or download notification that doesn't fit
+ into any other category.
+
+
+
+ "transfer.complete"
+ A file transfer or download complete notification.
+
+
+ "transfer.error"
+ A file transfer or download error.
+
+
+
+
+
+
+
+ Urgency Levels
+
+ Notifications have an urgency level associated with them. This defines
+ the importance of the notification. For example, "Joe Bob signed on"
+ would be a low urgency. "You have new mail" or "A USB device was unplugged"
+ would be a normal urgency. "Your computer is on fire" would be a critical
+ urgency.
+
+ Urgency levels are defined as follows:
+
+ Urgency Levels
+
+
+
+ Type
+ Description
+
+
+
+
+ 0
+ Low
+
+
+ 1
+ Normal
+
+
+ 2
+ Critical
+
+
+
+
+
+ Developers must use their own judgement when deciding the urgency of a
+ notification. Typically, if the majority of programs are using the same
+ level for a specific type of urgency, other applications should follow
+ them.
+
+
+ For low and normal urgencies, server implementations may display the
+ notifications how they choose. They should, however, have a sane
+ expiration timeout dependent on the urgency level.
+
+
+ Critical notifications should not automatically expire, as they are
+ things that the user will most likely want to know about. They should
+ only be closed when the user dismisses them, for example, by clicking on
+ the notification.
+
+
+
+
+ Hints
+
+ Hints are a way to provide extra data to a notification server that
+ the server may be able to make use of.
+
+
+ Neither clients nor notification servers are required to support any
+ hints. Both sides should assume that hints are not passed, and should
+ ignore any hints they do not understand.
+
+
+ Third parties, when defining their own hints, should discuss the
+ possibility of standardizing on the hint with other parties, preferably
+ in a place such as the
+ xdg
+ mailing list at
+ freedesktop.org. If it
+ warrants a standard, it will be added to the table above. If no
+ consensus is reached, the hint name should be in the form of
+ "x-vendor-name."
+
+
+ The value type for the hint dictionary in D-BUS is of the
+ DBUS_TYPE_VARIANT container type. This allows different
+ data types (string, integer, boolean, etc.) to be used for hints. When
+ adding a dictionary of hints, this type must be used, rather than putting
+ the actual hint value in as the dictionary value.
+
+
+ The following table lists the standard hints as defined by this
+ specification. Future hints may be proposed and added to this list
+ over time. Once again, implementations are not required to support these.
+
+
+ Standard Hints
+
+
+
+ Name
+ Value Type
+ Description
+
+
+
+
+ "sound-file"
+ string
+
+ The path to a sound file to play when the notification pops up.
+
+
+
+ "suppress-sound"
+ boolean
+
+ Causes the server to suppress playing any sounds, if it has that
+ ability. This is usually set when the client itself is going to
+ play its own sound.
+
+
+
+ "x"
+ int
+
+ Specifies the X location on the screen that the notification should
+ point to. The "y" hint must also be specified.
+
+
+
+ "y"
+ int
+
+ Specifies the Y location on the screen that the notification should
+ point to. The "x" hint must also be specified.
+
+
+
+
+
+
+
+
+ D-BUS Protocol
+
+ The following messages must be supported by all
+ implementations.
+
+
+
+ Message commands
+
+
+ org.freedesktop.Notifications.GetCapabilities
+
+
+ STRING_ARRAY
+ org.freedesktop.Notifications.GetCapabilities
+
+
+
+
+
+ This message takes no parameters.
+
+
+ It returns an array of strings. Each string describes an optional
+ capability implemented by the server. The following values are
+ defined by this spec:
+
+
+ Server Capabilities
+
+
+
+ "actions"
+
+ The server will provide the specified actions to the user. Even if
+ this cap is missing, actions may still be specified by the client,
+ however the server is free to ignore them.
+
+
+
+ "body"
+
+ Supports body text. Some implementations may only show the
+ summary (for instance, onscreen displays, marquee/scrollers)
+
+
+
+ "body-hyperlinks"
+
+ The server supports hyperlinks in the notifications.
+
+
+
+ "body-images"
+
+ The server supports images in the notifications.
+
+
+
+ "body-markup"
+
+ Supports markup in the body text. If marked up text is sent
+ to a server that does not give this cap, the markup will show
+ through as regular text so must be stripped clientside.
+
+
+
+ "icon-multi"
+
+ The server will render an animation of all the frames in a given
+ image array. The client may still specify multiple frames even if
+ this cap and/or "icon-static" is missing, however
+ the server is free to ignore them and use only the primary frame.
+
+
+
+ "icon-static"
+
+ Supports display of exactly 1 frame of any given image array.
+ This value is mutually exclusive with
+ "icon-multi", it is a protocol error for the
+ server to specify both.
+
+
+
+ "sound"
+
+ The server supports sounds on notifications. If returned, the
+ server must support the "sound-file" and
+ "suppress-sound" hints.
+
+
+
+
+
+
+ New vendor-specific caps may be specified as long as they start with
+ "x-vendor". For instance,
+ "x-gnome-foo-cap". Capability names must not
+ contain spaces. They are limited to alpha-numeric characters and dashes
+ ("-").
+
+
+
+
+ org.freedesktop.Notifications.Notify
+
+
+ UINT32
+ org.freedesktop.Notifications.Notify
+
+ STRING app_name
+ BYTE_ARRAY_OR_STRING app_icon
+ UINT32 replaces_id
+ STRING notification_type
+ BYTE urgency_level
+ STRING summary
+ STRING body
+ ARRAY images
+ DICT actions
+ DICT hints
+ BOOL expires
+ UINT32 expire_timeout
+
+
+
+ Sends a notification to the notification server.
+
+
+ Notify Parameters
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ app_name
+ STRING
+
+ The optional name of the application sending the notification.
+ Can be blank.
+
+
+
+ app_icon
+ BYTE_ARRAY or STRING
+
+ The optional program icon of the calling application. This is in
+ the same format as an image frame. See .
+ Can be an empty string, indicating no icon.
+
+
+
+ replaces_id
+ UINT32
+
+ The optional notification ID that this notification replaces. The
+ server must atomically (ie with no flicker or other visual cues)
+ replace the given notification with this one. This allows clients to
+ effectively modify the notification while it's active. A value of
+ value of 0 means that this notification won't replace any
+ existing notifications.
+
+
+
+ notification_type
+ STRING
+
+ The optional notification type ID, for potential server
+ categorization and logging purposes. See
+ . Can be empty.
+
+
+
+ urgency_level
+ BYTE
+ The urgency level. See .
+
+
+ summary
+ STRING
+ The summary text briefly describing the notification.
+
+
+ body
+ STRING
+ The optional detailed body text. Can be empty.
+
+
+ images
+ ARRAY
+
+ The optional array of images. See . Can
+ be empty.
+
+
+
+ actions
+ DICT
+
+ A dictionary key of actions. Each key is the localized name of the
+ action, as it should appear to the user, and maps to a UINT32 value
+ containing a program-specific action code. This code will be reported
+ back to the program if the action is invoked by the user. Can be
+ empty.
+
+
+
+ hints
+ DICT
+
+ Optional hints that can be passed to the server from the client
+ program. Although clients and servers should never assume each other
+ supports any specific hints, they can be used to pass along
+ information, such as the process PID or window ID, that the server
+ may be able to make use of. See . Can be
+ empty.
+
+
+
+ expires
+ BOOL
+
+ A boolean flag indicating whether or not this notification should
+ automatically expire.
+
+
+
+ expire_timeout
+ UINT32
+
+
+ The timeout time in seconds since the display of the notification at
+ which the notification should automatically close. This is ignored
+ if the expires flag is set to false.
+
+
+ If zero, the notification's expiration time is dependent on the
+ notification server's settings, and may vary for the type of
+ notification.
+
+
+
+
+
+
+
+ If replaces_id is 0, the return value is a
+ UINT32 that represent the notification. It is unique, and will not be
+ reused unless a MAXINT number of notifications
+ have been generated. An acceptable implementation may just use an
+ incrementing counter for the ID. The returned ID is always greater than
+ zero. Servers must make sure not to return zero as an ID.
+
+
+ If replaces_id is not 0, the returned value
+ is the same value as replaces_id.
+
+
+
+
+ org.freedesktop.Notifications.CloseNotification
+
+
+ void
+ org.freedesktop.Notifications.CloseNotification
+
+ UINT32 id
+
+
+
+ Causes a notification to be forcefully closed and removed from the user's
+ view. It can be used, for example, in the event that what the
+ notification pertains to is no longer relevant, or to cancel a
+ notification with no expiration time.
+
+
+ The NotificationClosed signal is emitted by this
+ method.
+
+
+ If the notification no longer exists, an empty D-BUS Error message is
+ sent back.
+
+
+
+
+ org.freedesktop.Notifications.GetServerInformation
+
+
+
+ void
+ org.freedesktop.Notifications.GetServerInformation
+
+ out STRING name
+ out STRING vendor
+ out STRING version
+
+
+
+ This message returns the information on the server. Specifically,
+ the server name, vendor, and version number.
+
+
+ GetServerInformation Return Values
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ name
+ STRING
+ The product name of the server.
+
+
+ vendor
+ STRING
+
+ The vendor name. For example, "KDE," "GNOME,"
+ "freedesktop.org," or "Microsoft."
+
+
+
+ version
+ STRING
+ The server's version number.
+
+
+
+
+
+
+
+
+ Signals
+
+
+ org.freedesktop.Notifications.NotificationClosed
+
+
+
+ org.freedesktop.Notifications.NotificationClosed
+
+ UINT32 id
+ UINT32 reason
+
+
+
+ A completed notification is one that has timed out, or has been
+ dismissed by the user.
+
+
+ NotificationClosed Parameters
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ id
+ UINT32
+ The ID of the notification that was closed.
+
+
+ reason
+ UINT32
+
+ The reason the notification was closed.
+ 1 - The notification expired.
+ 2 - The notification was dismissed by the user.
+ 3 - The notification was closed by a call to
+ CloseNotification.
+ 4 - Undefined/reserved reasons.
+
+
+
+
+
+
+ The ID specified in the signal is invalidated
+ before the signal is sent and may not be used
+ in any further communications with the server.
+
+
+
+
+ org.freedesktop.Notifications.ActionInvoked
+
+
+
+ org.freedesktop.Notifications.ActionInvoked
+
+ UINT32 id
+
+ UINT32 action_id
+
+
+
+ This signal is emitted when one of the following occurs:
+
+
+
+
+ The user performs some global "invoking" action upon a notification.
+ For instance, clicking somewhere on the notification itself.
+
+
+
+
+ The user invokes a specific action as specified in the original
+ Notify request. For example, clicking on an action button.
+
+
+
+
+ ActionInvoked Parameters
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ id
+ UINT32
+
+ The ID of the notification emitting the ActionInvoked signal.
+
+
+
+
+ action_id
+ UINT32
+
+ The ID of the action invoked. A value of 0 means that the default
+ action was invoked, i.e., clicking the notification itself.
+ IDs greater than zero are the action IDs as defined by the
+ calling application.
+
+
+
+
+
+
+
+
+ Clients should not assume the server will generate this signal. Some
+ servers may not support user interaction at all, or may not support
+ the concept of being able to "invoke" a notification.
+
+
+
+
+
+
diff --git a/docs/releases/notification-spec-0.9.xml b/docs/releases/notification-spec-0.9.xml
new file mode 100644
index 0000000..e1297db
--- /dev/null
+++ b/docs/releases/notification-spec-0.9.xml
@@ -0,0 +1,1216 @@
+
+
+
+
+ Desktop Notifications Specification
+ Version 0.9
+ 15 January 2006
+
+
+ Mike
+ Hearn
+
+
+ mike@navi.cx
+
+
+
+
+ Christian
+ Hammond
+
+
+ chipx86@chipx86.com
+
+
+
+
+
+
+ 0.9
+ 15 January 2006
+ cdh
+
+ Clarify the naming for the application IDs.
+ Put back a number of things that probably shouldn't have been removed
+ from the spec.
+
+
+
+ 0.8
+ 23 September 2005
+ J5
+
+ Major overhaul of spec to work with the newer D-Bus recursive type system.
+ Simplify protocol.
+ Changed the verbage notification type to category
+
+
+
+ 0.7
+ 28 July 2005
+ cdh
+
+ Added "x" and "y" hints. Talk about the variant type for hint values.
+
+
+
+ 0.6
+ 1 April 2005
+ cdh
+
+ Updated to work with D-BUS 0.31+.
+
+
+
+ 0.5
+ 2 October 2004
+ cdh
+
+ Added a "suppress-sound" hint. Added a "sound" capability. Renamed the
+ "soundfile" hint to sound-file".
+
+
+
+ 0.4
+ 29 September 2004
+ cdh
+
+ Added image support in markup, and made the restrictions on markup more
+ clear. Removed the High urgency. Added new notification types. Fixed
+ notification expiration.
+
+
+
+ 0.3
+ 15 September 2004
+ cdh
+ Added hint and notification type sections
+
+
+ 0.2
+ foo
+ mh
+ Added replaces field to protocol
+
+
+ 0.1
+ foo
+ mh
+ Initial version
+
+
+
+
+
+ Introduction
+
+ This is a draft standard for a desktop notifications service, through
+ which applications can generate passive popups (sometimes known as
+ "poptarts") to notify the user in an asynchronous manner of events.
+
+
+ This specification explicitly does not include other types of
+ notification presentation such as modal message boxes, window manager
+ decorations or window list annotations.
+
+
+ Example use cases include:
+
+
+
+
+ Presence changes in IM programs: for instance, MSN Messenger on
+ Windows pioneered the use of passive popups to indicate presence
+ changes.
+
+
+ Scheduled alarm
+ Completed file transfer
+ New mail notification
+ Low disk space/battery warnings
+
+
+
+
+ Basic Design
+
+ In order to ensure that multiple notifications can easily be
+ displayed at once, and to provide a convenient implementation, all
+ notifications are controlled by a single session-scoped service which
+ exposes a D-BUS interface.
+
+
+ On startup, a conforming implementation should take the
+ org.freedesktop.Notifications service on
+ the session bus. This service will be referred to as the "notification
+ server" or just "the server" in this document. It can optionally be
+ activated automatically by the bus process, however this is not required
+ and notification server clients must not assume that it is available.
+
+
+ The server should implement the
+ org.freedesktop.Notifications interface on
+ an object with the path "/org/freedesktop/Notifications".
+ This is the only interface required by this version of the specification.
+
+
+ A notification has the following components:
+
+
+ Notification Components
+
+
+
+ Component
+ Description
+
+
+
+
+ Application Name
+
+ This is the optional name of the application sending the notification.
+ This should be the application's formal name, rather than some sort
+ of ID. An example would be "FredApp E-Mail Client," rather than
+ "fredapp-email-client."
+
+
+
+ Replaces ID
+
+ An optional ID of an existing notification that this
+ notification is intended to replace.
+
+
+
+ Notification Icon
+
+ The notification icon. This is represented either as a URI
+ (file:// is the only URI schema supported right now) or a name in
+ a freedesktop.org-compliant icon theme (not a GTK+ stock ID).
+
+
+
+ Summary
+
+ This is a single line overview of the notification. For instance,
+ "You have mail" or "A friend has come online". It should generally
+ not be longer than 40 characters, though this is not a requirement,
+ and server implementations should word wrap if necessary. The summary
+ must be encoded using UTF-8.
+
+
+
+ Body
+
+
+ This is a multi-line body of text. Each line is a paragraph, server
+ implementations are free to word wrap them as they see fit.
+
+
+ The body may contain simple markup as specified in
+ . It must be encoded using UTF-8.
+
+
+ If the body is omitted, just the summary is displayed.
+
+
+
+
+ Actions
+
+
+ The actions send a request message back to the notification client
+ when invoked. This functionality may not be implemented by the
+ notification server, conforming clients should check if it is available
+ before using it (see the GetCapabilities message in
+ ). An implementation is free to ignore any
+ requested by the client. As an example one possible rendering of
+ actions would be as buttons in the notification popup.
+
+
+ Actions are sent over as a list of pairs. Each even element in the
+ list (starting at index 0) represents the identifier for the action.
+ Each odd element in the list is the localized string that will be
+ displayed to the user.
+
+
+ The default action (usually invoked my clicking the notification)
+ should have a key named "default". The name can
+ be anything, though implementations are free not to display it.
+
+
+
+
+ Hints
+
+ See .
+
+ Beyond the core protocol is the hints table. A couple of core
+ elements have been moved to hints mostly because in a huge number
+ of cases their default values would be sufficent. The elements moved
+ to hints are:
+
+
+ Elements Moved to Hints
+ Element
+ Description
+
+ Category ID
+ An optional ID representing the type of notification (the name
+ has been changed from Notification Type ID in pervious versions).
+ See .
+
+
+ Urgency Level
+ The urgency of the notification. See
+ . (Defaults to 1 - Normal)
+
+
+ Icon Data
+ Instead of overloading the icon field we now have an icon_data
+ field that is used when icon is blank.
+
+
+
+
+
+ Expiration Timeout
+
+
+ The timeout time in milliseconds since the display of the notification
+ at which the notification should automatically close.
+
+
+ If -1, the notification's expiration time is dependent on the
+ notification server's settings, and may vary for the type of
+ notification.
+
+
+ If 0, the notification never expires.
+
+
+
+
+
+
+
+ Each notification displayed is allocated a unique ID by the server.
+ This is unique within the session. While the notification server is
+ running, the ID will not be recycled unless the capacity of a uint32 is
+ exceeded.
+
+
+ This can be used to hide the notification before the expiration timeout
+ is reached. It can also be used to atomically replace the notification
+ with another. This allows you to (for instance) modify the contents of
+ a notification while it's on-screen.
+
+
+
+
+ Backwards Compatibility
+
+ Clients should try and avoid making assumptions about the presentation and
+ abilities of the notification server. The message content is the most
+ important thing.
+
+
+ Clients can check with the server what capabilities are supported
+ using the GetCapabilities message. See
+ .
+
+
+ If a client requires a response from a passive popup, it should be
+ coded such that a non-focus-stealing message box can be used in the
+ case that the notification server does not support this feature.
+
+
+
+
+ Markup
+
+ Body text may contain markup. The markup is XML-based, and consists
+ of a small subset of HTML along with a few additional tags.
+
+
+ The following tags should be supported by the notification server.
+ Though it is optional, it is recommended. Notification servers that do
+ not support these tags should filter them out.
+
+
+
+
+
+
+ b ...
+ b
+
+ Bold
+
+
+
+ i ...
+ i
+
+ Italic
+
+
+
+ u ...
+ u
+
+ Underline
+
+
+
+ a href="..." ...
+ a
+
+ Hyperlink
+
+
+
+ img src="..." alt="..."
+
+ Image
+
+
+
+
+
+ A full-blown HTML implementation is not required of this spec, and
+ notifications should never take advantage of tags that are not listed
+ above. As notifications are not a substitute for web browsers or complex
+ dialogs, advanced layout is not necessary, and may in fact limit the
+ number of systems that notification services can run on, due to memory
+ usage and screen space. Such examples are PDAs, certain cell phones, and
+ slow PCs or laptops with little memory.
+
+
+ For the same reason, a full XML or XHTML implementation using XSLT or
+ CSS stylesheets is not part of this specification. Information that
+ must be presented in a more complex form should use an application-specific
+ dialog, a web browser, or some other display mechanism.
+
+
+ The tags specified above mark up the content in a way that allows them
+ to be stripped out on some implementations without impacting the actual
+ content.
+
+
+
+ Hyperlinks
+
+ Hyperlinks allow for linking one or more words to a URI. There is no
+ requirement to allow for images to be linked, and it is highly suggested
+ that implementations do not allow this, as there is no clean-looking,
+ standard visual indicator for a hyperlinked image.
+
+
+ Hyperlinked text should appear in the standard blue underline format.
+
+
+ Hyperlinks cannot function as a replacement for actions. They are
+ used to link to local directories or remote sites using standard URI
+ schemes.
+
+
+ Implementations are not required to support hyperlinks.
+
+
+
+
+ Images
+
+ Images may be placed in the notification, but this should be done with
+ caution. The image should never exceed 200x100, but this should be thought
+ of as a maximum size. Images should always have alternative text
+ provided through the alt="..." attribute.
+
+
+ Image data cannot be embedded in the message itself. Images referenced
+ must always be local files.
+
+
+ Implementations are not required to support images.
+
+
+
+
+
+ Icons
+
+ A notification can optionally have an icon specified by the Notification
+ Icon field or by the icon_data hint.
+
+
+ The icon_data field should be a raw image data structure of signature
+ (iiibiiay) which describes the width, height, rowstride, has alpha, bits
+ per sample, channels and image data respectively.
+
+
+
+
+ Categories
+
+ Notifications can optionally have a type indicator. Although neither
+ client or nor server must support this, some may choose to. Those servers
+ implementing categories may use them to intelligently display
+ the notification in a certain way, or group notifications of similar
+ types.
+
+
+ Categories are in
+ class.specific form.
+ class specifies the generic type of notification, and
+ specific specifies the more specific type of
+ notification.
+
+
+ If a specific type of notification does not exist for your notification,
+ but the generic kind does, a notification of type
+ class is acceptable.
+
+
+ Third parties, when defining their own categories, should discuss
+ the possibility of standardizing on the hint with other parties, preferably
+ in a place such as the
+ xdg
+ mailing list at
+ freedesktop.org. If it
+ warrants a standard, it will be added to the table above. If no
+ consensus is reached, the category should be in the form of
+ "x-vendor.class.name."
+
+
+ The following table lists standard notifications as defined by this spec.
+ More will be added in time.
+
+
+ Categories
+
+
+
+ Type
+ Description
+
+
+
+
+ "device"
+
+ A generic device-related notification that doesn't fit into
+ any other category.
+
+
+
+ "device.added"
+ A device, such as a USB device, was added to the system.
+
+
+ "device.error"
+ A device had some kind of error.
+
+
+ "device.removed"
+
+ A device, such as a USB device, was removed from the system.
+
+
+
+ "email"
+
+ A generic e-mail-related notification that doesn't fit into any
+ other category.
+
+
+
+ "email.arrived"
+ A new e-mail notification.
+
+
+ "email.bounced"
+ A notification stating that an e-mail has bounced.
+
+
+ "im"
+
+ A generic instant message-related notification that doesn't fit
+ into any other category.
+
+
+
+ "im.error"
+ An instant message error notification.
+
+
+ "im.received"
+ A received instant message notification.
+
+
+ "network"
+
+ A generic network notification that doesn't fit into any other
+ category.
+
+
+
+ "network.connected"
+
+ A network connection notification, such as successful sign-on to a
+ network service. This should not be confused with
+ device.added for new network devices.
+
+
+
+ "network.disconnected"
+
+ A network disconnected notification. This should not be confused with
+ device.removed for disconnected network devices.
+
+
+
+ "network.error"
+
+ A network-related or connection-related error.
+
+
+
+ "presence"
+
+ A generic presence change notification that doesn't fit into
+ any other category, such as going away or idle.
+
+
+
+ "presence.offline"
+ An offline presence change notification.
+
+
+ "presence.online"
+ An online presence change notification.
+
+
+ "transfer"
+
+ A generic file transfer or download notification that doesn't fit
+ into any other category.
+
+
+
+ "transfer.complete"
+ A file transfer or download complete notification.
+
+
+ "transfer.error"
+ A file transfer or download error.
+
+
+
+
+
+
+
+ Urgency Levels
+
+ Notifications have an urgency level associated with them. This defines
+ the importance of the notification. For example, "Joe Bob signed on"
+ would be a low urgency. "You have new mail" or "A USB device was unplugged"
+ would be a normal urgency. "Your computer is on fire" would be a critical
+ urgency.
+
+ Urgency levels are defined as follows:
+
+ Urgency Levels
+
+
+
+ Type
+ Description
+
+
+
+
+ 0
+ Low
+
+
+ 1
+ Normal
+
+
+ 2
+ Critical
+
+
+
+
+
+ Developers must use their own judgement when deciding the urgency of a
+ notification. Typically, if the majority of programs are using the same
+ level for a specific type of urgency, other applications should follow
+ them.
+
+
+ For low and normal urgencies, server implementations may display the
+ notifications how they choose. They should, however, have a sane
+ expiration timeout dependent on the urgency level.
+
+
+ Critical notifications should not automatically expire, as they are
+ things that the user will most likely want to know about. They should
+ only be closed when the user dismisses them, for example, by clicking on
+ the notification.
+
+
+
+
+ Hints
+
+ Hints are a way to provide extra data to a notification server that
+ the server may be able to make use of.
+
+
+ Neither clients nor notification servers are required to support any
+ hints. Both sides should assume that hints are not passed, and should
+ ignore any hints they do not understand.
+
+
+ Third parties, when defining their own hints, should discuss the
+ possibility of standardizing on the hint with other parties, preferably
+ in a place such as the
+ xdg
+ mailing list at
+ freedesktop.org. If it
+ warrants a standard, it will be added to the table above. If no
+ consensus is reached, the hint name should be in the form of
+ "x-vendor-name."
+
+
+ The value type for the hint dictionary in D-BUS is of the
+ DBUS_TYPE_VARIANT container type. This allows different
+ data types (string, integer, boolean, etc.) to be used for hints. When
+ adding a dictionary of hints, this type must be used, rather than putting
+ the actual hint value in as the dictionary value.
+
+
+ The following table lists the standard hints as defined by this
+ specification. Future hints may be proposed and added to this list
+ over time. Once again, implementations are not required to support these.
+
+
+ Standard Hints
+
+
+
+ Name
+ Value Type
+ Description
+
+
+
+
+ "urgency"
+ byte
+
+ The urgency level.
+
+
+
+ "category"
+ string
+
+ The type of notification this is.
+
+
+
+ "desktop-entry">
+ string
+
+ This specifies the name of the desktop filename representing the
+ calling program. This should be the same as the prefix used for the
+ application's .desktop file. An example would be "rhythmbox" from
+ "rhythmbox.desktop". This can be used by the daemon to retrieve the
+ correct icon for the application, for logging purposes, etc.
+
+
+
+ "image_data"
+ (iiibiiay)
+
+ This is a raw data image format which describes the width, height,
+ rowstride, has alpha, bits per sample, channels and image data
+ respectively. We use this value if the icon field is left blank.
+
+
+
+ "sound-file"
+ string
+
+ The path to a sound file to play when the notification pops up.
+
+
+
+ "suppress-sound"
+ boolean
+
+ Causes the server to suppress playing any sounds, if it has that
+ ability. This is usually set when the client itself is going to
+ play its own sound.
+
+
+
+ "x"
+ int
+
+ Specifies the X location on the screen that the notification should
+ point to. The "y" hint must also be specified.
+
+
+
+ "y"
+ int
+
+ Specifies the Y location on the screen that the notification should
+ point to. The "x" hint must also be specified.
+
+
+
+
+
+
+
+
+ D-BUS Protocol
+
+ The following messages must be supported by all
+ implementations.
+
+
+
+ Message commands
+
+
+ org.freedesktop.Notifications.GetCapabilities
+
+
+ STRING_ARRAY
+ org.freedesktop.Notifications.GetCapabilities
+
+
+
+
+
+ This message takes no parameters.
+
+
+ It returns an array of strings. Each string describes an optional
+ capability implemented by the server. The following values are
+ defined by this spec:
+
+
+ Server Capabilities
+
+
+
+ "actions"
+
+ The server will provide the specified actions to the user. Even if
+ this cap is missing, actions may still be specified by the client,
+ however the server is free to ignore them.
+
+
+
+ "body"
+
+ Supports body text. Some implementations may only show the
+ summary (for instance, onscreen displays, marquee/scrollers)
+
+
+
+ "body-hyperlinks"
+
+ The server supports hyperlinks in the notifications.
+
+
+
+ "body-images"
+
+ The server supports images in the notifications.
+
+
+
+ "body-markup"
+
+ Supports markup in the body text. If marked up text is sent
+ to a server that does not give this cap, the markup will show
+ through as regular text so must be stripped clientside.
+
+
+
+ "icon-multi"
+
+ The server will render an animation of all the frames in a given
+ image array. The client may still specify multiple frames even if
+ this cap and/or "icon-static" is missing, however
+ the server is free to ignore them and use only the primary frame.
+
+
+
+ "icon-static"
+
+ Supports display of exactly 1 frame of any given image array.
+ This value is mutually exclusive with
+ "icon-multi", it is a protocol error for the
+ server to specify both.
+
+
+
+ "sound"
+
+ The server supports sounds on notifications. If returned, the
+ server must support the "sound-file" and
+ "suppress-sound" hints.
+
+
+
+
+
+
+ New vendor-specific caps may be specified as long as they start with
+ "x-vendor". For instance,
+ "x-gnome-foo-cap". Capability names must not
+ contain spaces. They are limited to alpha-numeric characters and dashes
+ ("-").
+
+
+
+
+ org.freedesktop.Notifications.Notify
+
+
+ UINT32
+ org.freedesktop.Notifications.Notify
+
+ STRING app_name
+ UINT32 replaces_id
+ STRING app_icon
+ STRING summary
+ STRING body
+ ARRAY actions
+ DICT hints
+ INT32 expire_timeout
+
+
+
+ Sends a notification to the notification server.
+
+
+ Notify Parameters
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ app_name
+ STRING
+
+ The optional name of the application sending the notification.
+ Can be blank.
+
+
+
+ replaces_id
+ UINT32
+
+ The optional notification ID that this notification replaces. The
+ server must atomically (ie with no flicker or other visual cues)
+ replace the given notification with this one. This allows clients to
+ effectively modify the notification while it's active. A value of
+ value of 0 means that this notification won't replace any
+ existing notifications.
+
+
+
+ app_icon
+ STRING
+
+ The optional program icon of the calling application. See .
+ Can be an empty string, indicating no icon.
+
+
+
+ summary
+ STRING
+ The summary text briefly describing the notification.
+
+
+ body
+ STRING
+ The optional detailed body text. Can be empty.
+
+
+ actions
+ ARRAY
+
+ Actions are sent over as a list of pairs. Each even element in
+ the list (starting at index 0) represents the identifier for the
+ action. Each odd element in the list is the localized string
+ that will be displayed to the user.
+
+
+
+ hints
+ DICT
+
+ Optional hints that can be passed to the server from the client
+ program. Although clients and servers should never assume each other
+ supports any specific hints, they can be used to pass along
+ information, such as the process PID or window ID, that the server
+ may be able to make use of. See . Can be
+ empty.
+
+
+
+ expire_timeout
+ INT32
+
+
+ The timeout time in milliseconds since the display of the notification at
+ which the notification should automatically close.
+
+
+ If -1, the notification's expiration time is dependent on the
+ notification server's settings, and may vary for the type of
+ notification.
+
+ If 0, never expire.
+
+
+
+
+
+
+
+ If replaces_id is 0, the return value is a
+ UINT32 that represent the notification. It is unique, and will not be
+ reused unless a MAXINT number of notifications
+ have been generated. An acceptable implementation may just use an
+ incrementing counter for the ID. The returned ID is always greater than
+ zero. Servers must make sure not to return zero as an ID.
+
+
+ If replaces_id is not 0, the returned value
+ is the same value as replaces_id.
+
+
+
+
+ org.freedesktop.Notifications.CloseNotification
+
+
+ void
+ org.freedesktop.Notifications.CloseNotification
+
+ UINT32 id
+
+
+
+ Causes a notification to be forcefully closed and removed from the user's
+ view. It can be used, for example, in the event that what the
+ notification pertains to is no longer relevant, or to cancel a
+ notification with no expiration time.
+
+
+ The NotificationClosed signal is emitted by this
+ method.
+
+
+ If the notification no longer exists, an empty D-BUS Error message is
+ sent back.
+
+
+
+
+ org.freedesktop.Notifications.GetServerInformation
+
+
+
+ void
+ org.freedesktop.Notifications.GetServerInformation
+
+ out STRING name
+ out STRING vendor
+ out STRING version
+
+
+
+ This message returns the information on the server. Specifically,
+ the server name, vendor, and version number.
+
+
+ GetServerInformation Return Values
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ name
+ STRING
+ The product name of the server.
+
+
+ vendor
+ STRING
+
+ The vendor name. For example, "KDE," "GNOME,"
+ "freedesktop.org," or "Microsoft."
+
+
+
+ version
+ STRING
+ The server's version number.
+
+
+
+
+
+
+
+
+ Signals
+
+
+ org.freedesktop.Notifications.NotificationClosed
+
+
+
+ org.freedesktop.Notifications.NotificationClosed
+
+ UINT32 id
+ UINT32 reason
+
+
+
+ A completed notification is one that has timed out, or has been
+ dismissed by the user.
+
+
+ NotificationClosed Parameters
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ id
+ UINT32
+ The ID of the notification that was closed.
+
+
+ reason
+ UINT32
+
+ The reason the notification was closed.
+ 1 - The notification expired.
+ 2 - The notification was dismissed by the user.
+ 3 - The notification was closed by a call to
+ CloseNotification.
+ 4 - Undefined/reserved reasons.
+
+
+
+
+
+
+ The ID specified in the signal is invalidated
+ before the signal is sent and may not be used
+ in any further communications with the server.
+
+
+
+
+ org.freedesktop.Notifications.ActionInvoked
+
+
+
+ org.freedesktop.Notifications.ActionInvoked
+
+ UINT32 id
+ STRING action_key
+
+
+
+ This signal is emitted when one of the following occurs:
+
+
+
+
+ The user performs some global "invoking" action upon a notification.
+ For instance, clicking somewhere on the notification itself.
+
+
+
+
+ The user invokes a specific action as specified in the original
+ Notify request. For example, clicking on an action button.
+
+
+
+
+ ActionInvoked Parameters
+
+
+
+ Name
+ Type
+ Description
+
+
+
+
+ id
+ UINT32
+
+ The ID of the notification emitting the ActionInvoked signal.
+
+
+
+ action_key
+ STRING
+
+ The key of the action invoked. These match the keys sent over
+ in the list of actions.
+
+
+
+
+
+
+
+ Clients should not assume the server will generate this signal. Some
+ servers may not support user interaction at all, or may not support
+ the concept of being able to "invoke" a notification.
+
+
+
+
+
+