| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 |
- /*
- Simple DirectMedia Layer
- Copyright (C) 1997-2026 Sam Lantinga <slouken@libsdl.org>
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
- /**
- * # CategoryNotifications
- *
- * Notifications are temporary popup dialogs that passively present
- * information to the user, or prompt user action. They are managed
- * and presented by the system, and can present simple options for
- * user feedback, usually in the form of buttons.
- *
- * The capabilities of notifications, and how they are displayed,
- * vary between systems, but they generally allow for a title,
- * message body, an associated image, and buttons to allow the user
- * to provide feedback.
- *
- * How notifications are presented and handled are subject to system
- * policy, and it should not be assumed that showing a notification
- * means that the user will see it immediately, if at all. The
- * user may disable notifications for certain applications, they may
- * be suppressed based on the current activity, and most systems
- * provide a "do not disturb" mode that universally silences
- * notifications when activated.
- *
- * There is both a customizable function `SDL_ShowNotificationWithProperties()`
- * that offers many options for what is displayed, and also a much-simplified
- * version `SDL_ShowSimpleNotification()`, which simply takes a header (required),
- * body (optional), and image (optional).
- */
- #ifndef SDL_notification_h_
- #define SDL_notification_h_
- #include <SDL3/SDL_properties.h>
- #include <SDL3/SDL_stdinc.h>
- #include <SDL3/SDL_surface.h>
- #include <SDL3/SDL_begin_code.h>
- /* Set up for C function definitions, even when using C++ */
- #ifdef __cplusplus
- extern "C" {
- #endif
- /**
- * The path to an image to be used as the header icon for system notifications
- * on some platforms.
- *
- * This is required on: - Windows - *nix when not running in a container, and
- * no .desktop entry is available
- *
- * Image types supported depend on the platform, but .png generally offers the
- * best compatability.
- *
- * On *nix platforms, this can also be the name of a system icon, as specified
- * by the Icon Naming Specification.
- *
- * Can be set before calling SDL_ShowNotification() or
- * SDL_ShowSimpleNotification() for the first time.
- *
- * \since This macro is available since SDL 3.6.0.
- */
- #define SDL_PROP_GLOBAL_NOTIFICATION_HEADER_ICON_STRING "SDL.notification.header_icon"
- typedef Uint32 SDL_NotificationID; /**< The identifier for a system notification. */
- typedef enum SDL_NotificationPriority
- {
- SDL_NOTIFICATION_PRIORITY_LOW = -1, /**< Lowest priority. */
- SDL_NOTIFICATION_PRIORITY_NORMAL = 0, /**< Normal/medium priority. */
- SDL_NOTIFICATION_PRIORITY_HIGH = 1, /**< High/important priority. */
- SDL_NOTIFICATION_PRIORITY_CRITICAL = 2 /**< Highest/critical priority. Note that this may override any "Do Not Disturb" settings and wake the screen. */
- } SDL_NotificationPriority;
- typedef enum SDL_NotificationActionType
- {
- SDL_NOTIFICATION_ACTION_TYPE_BUTTON = 1 /**< Adds a button to the notification that generates feedback when activated. */
- } SDL_NotificationActionType;
- /**
- * Notification structure describing actions that can be used to allow users
- * to interact with notification dialogs.
- *
- * Exactly How they are presented depends on the platform and implementation.
- *
- * User interactions with a notification are reported via events with the type
- * SDL_EVENT_NOTIFICATION_ACTION_INVOKED.
- *
- * Action types: - button: A button with a localized text label, which
- * generates feedback when activated.
- *
- * \sa SDL_NotificationEvent
- * \sa SDL_NotificationActionType
- */
- typedef union SDL_NotificationAction
- {
- SDL_NotificationActionType type;
- struct
- {
- SDL_NotificationActionType type; /**< SDL_NOTIFICATION_ACTION_TYPE_BUTTON */
- const char *action_id; /**< The identifier string for the button. 'default' is a reserved identifier and must not be used. */
- const char *action_label; /**< The localized label for the button associated with the action, in UTF-8 encoding. */
- } button;
- Uint8 padding[128];
- } SDL_NotificationAction;
- #define SDL_PROP_NOTIFICATION_ACTIONS_POINTER "SDL.notification.actions"
- #define SDL_PROP_NOTIFICATION_ACTION_COUNT_NUMBER "SDL.notification.action_count"
- #define SDL_PROP_NOTIFICATION_IMAGE_POINTER "SDL.notification.image"
- #define SDL_PROP_NOTIFICATION_MESSAGE_STRING "SDL.notification.message"
- #define SDL_PROP_NOTIFICATION_PRIORITY_NUMBER "SDL.notification.priority"
- #define SDL_PROP_NOTIFICATION_REPLACES_NUMBER "SDL.notification.replaces"
- #define SDL_PROP_NOTIFICATION_SOUND_STRING "SDL.notification.sound"
- #define SDL_PROP_NOTIFICATION_TRANSIENT_BOOLEAN "SDL.notification.transient"
- #define SDL_PROP_NOTIFICATION_TITLE_STRING "SDL.notification.title"
- /**
- * Requests permission from the system to display notifications.
- *
- * A return value of `true` only means that the system supports notifications,
- * and that the request for permission was successfully issued. It does not
- * reflect any user settings to allow or deny notifications.
- *
- * \returns True on success or false on failure; call SDL_GetError() for more
- * information.
- *
- * \since This function is available since SDL 3.6.0.
- *
- * \sa SDL_ShowNotification
- * \sa SDL_ShowNotificationWithProperties
- * \sa SDL_NotificationAction
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_RequestNotificationPermission(void);
- /**
- * Show a system notification.
- *
- * System notifications are small, asynchronous popup windows that notify the
- * user of some information. How they are displayed is system dependent.
- *
- * These are the supported properties:
- *
- * - `SDL_PROP_NOTIFICATION_TITLE_STRING`: the title of the notification, in
- * UTF-8 encoding. This property is required.
- * - `SDL_PROP_NOTIFICATION_ACTIONS_POINTER`: An array of pointers to
- * `SDL_NotificationAction` structs that will add actions to the
- * notification, usually in the form of buttons or menu items. Note that
- * systems may have a limit on the maximum number of actions that a
- * notification can have.
- * - `SDL_PROP_NOTIFICATIONS_ACTION_COUNT_NUMBER`: the number of actions in
- * the array of actions, if it exists.
- * - `SDL_PROP_NOTIFICATION_IMAGE_POINTER`: a pointer to an `SDL_Surface`
- * containing an image that will be attached to the notification. In most
- * cases, the image is displayed in the form of a large icon or thumbnail
- * alongside the message body. Notifications on Apple platforms can be
- * expanded to show a larger format image.
- * - `SDL_PROP_NOTIFICATION_MESSAGE_STRING`: the message body of the
- * notification, in UTF-8 encoding.
- * - `SDL_PROP_NOTIFICATION_PRIORITY_NUMBER`: an `SDL_NotificationPriority`
- * value representing the notification priority.
- * - `SDL_PROP_NOTIFICATION_REPLACES_NUMBER`: the `SDL_NotificationID` of a
- * previously shown notification that this notification should replace.
- * - `SDL_PROP_NOTIFICATION_SOUND_STRING`: sets a sound to play when the
- * notification is shown. This can have the value "default", to play the
- * system default notification sound, "silent", to play no sound, or contain
- * the path to a file with a custom sound. The paths and formats that can be
- * used for custom sounds are system-specific, and can have some
- * restrictions, depending on the platform:
- * - Apple platforms require that the sound file is contained within the app
- * bundle. Supported formats are: Linear PCM, MA4 (IMA/ADPCM), uLaw, or
- * aLaw, in an .aiff, .wav, or .caf file.
- * - Windows can only play custom notification sounds when the app is packaged
- * inside an MSIX installer. Playback from arbitrary file paths is not
- * supported. Supported formats are: .aac, .flac, .m4a, .mp3, .wav, and
- * .wma.
- * - Unix platforms can generally load sounds from any arbitrary path, as long
- * as the read permissions are correct. Supported formats are: ogg/opus,
- * ogg/vorbis, and wav/pcm. If this property is not set, the system default
- * sound will be used.
- * - `SDL_PROP_NOTIFICATION_TRANSIENT_BOOLEAN`: true if the notification
- * should not persist in the system notification center after initially
- * being shown.
- *
- * Not all properties are supported by all platforms.
- *
- * Notifications are available on: - Windows 10 or higher - macOS 10.14 or
- * higher - iOS 11 or higher - *nix platforms that support the
- * org.freedesktop.Notifications, or org.freedesktop.portal.Notification
- * interfaces
- *
- * \param props the properties to be used when creating this notification.
- * \returns A non-zero SDL_NotificationID on success or 0 on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.6.0.
- *
- * \sa SDL_ShowNotification
- * \sa SDL_NotificationAction
- * \sa SDL_NotificationPriority
- * \sa SDL_NotificationEvent
- */
- extern SDL_DECLSPEC SDL_NotificationID SDLCALL SDL_ShowNotificationWithProperties(SDL_PropertiesID props);
- /**
- * Show a system notification with normal priority.
- *
- * \param title UTF-8 title text, required.
- * \param message UTF-8 message text, may be NULL.
- * \param image The image associated with this notification, may be NULL.
- * \param actions An array of actions to attach to the notification, may be
- * NULL.
- * \param num_actions The number of actions in the actions array.
- * \returns A non-zero SDL_NotificationID on success or 0 on failure; call
- * SDL_GetError() for more information.
- *
- * \since This function is available since SDL 3.6.0.
- *
- * \sa SDL_ShowNotificationWithProperties
- * \sa SDL_NotificationAction
- * \sa SDL_NotificationEvent
- */
- extern SDL_DECLSPEC SDL_NotificationID SDLCALL SDL_ShowNotification(const char *title, const char *message, SDL_Surface *image, SDL_NotificationAction *actions, int num_actions);
- /**
- * Remove a notification.
- *
- * \param notification the ID of the notification to remove.
- * \returns True on success or false on failure; call SDL_GetError() for more
- * information.
- *
- * \since This function is available since SDL 3.6.0.
- *
- * \sa SDL_ShowNotificationWithProperties
- * \sa SDL_ShowNotification
- */
- extern SDL_DECLSPEC bool SDLCALL SDL_RemoveNotification(SDL_NotificationID notification);
- // Ends C function definitions when using C++
- #ifdef __cplusplus
- }
- #endif
- #include <SDL3/SDL_close_code.h>
- #endif // SDL_notification_h_
|