mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-09-25 20:48:29 +00:00
Add SDL_IsTraySupported
This commit is contained in:
@@ -96,6 +96,25 @@ typedef Uint32 SDL_TrayEntryFlags;
|
|||||||
*/
|
*/
|
||||||
typedef void (SDLCALL *SDL_TrayCallback)(void *userdata, SDL_TrayEntry *entry);
|
typedef void (SDLCALL *SDL_TrayCallback)(void *userdata, SDL_TrayEntry *entry);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether or not tray icons can be created.
|
||||||
|
*
|
||||||
|
* Note that this function does not guarantee that SDL_CreateTray() will or will
|
||||||
|
* not work; you should still check SDL_CreateTray() for errors.
|
||||||
|
*
|
||||||
|
* Using tray icons require the video subsystem.
|
||||||
|
*
|
||||||
|
* \returns true if trays are available, false otherwise.
|
||||||
|
*
|
||||||
|
* \threadsafety This function should only be called on the main thread. It will
|
||||||
|
* return false if not called on the main thread.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 3.4.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_CreateTray
|
||||||
|
*/
|
||||||
|
extern SDL_DECLSPEC bool SDLCALL SDL_IsTraySupported(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an icon to be placed in the operating system's tray, or equivalent.
|
* Create an icon to be placed in the operating system's tray, or equivalent.
|
||||||
*
|
*
|
||||||
|
@@ -1254,6 +1254,7 @@ SDL3_0.0.0 {
|
|||||||
SDL_SetAudioIterationCallbacks;
|
SDL_SetAudioIterationCallbacks;
|
||||||
SDL_GetEventDescription;
|
SDL_GetEventDescription;
|
||||||
SDL_PutAudioStreamDataNoCopy;
|
SDL_PutAudioStreamDataNoCopy;
|
||||||
|
SDL_IsTraySupported;
|
||||||
# extra symbols go here (don't modify this line)
|
# extra symbols go here (don't modify this line)
|
||||||
local: *;
|
local: *;
|
||||||
};
|
};
|
||||||
|
@@ -1279,3 +1279,4 @@
|
|||||||
#define SDL_SetAudioIterationCallbacks SDL_SetAudioIterationCallbacks_REAL
|
#define SDL_SetAudioIterationCallbacks SDL_SetAudioIterationCallbacks_REAL
|
||||||
#define SDL_GetEventDescription SDL_GetEventDescription_REAL
|
#define SDL_GetEventDescription SDL_GetEventDescription_REAL
|
||||||
#define SDL_PutAudioStreamDataNoCopy SDL_PutAudioStreamDataNoCopy_REAL
|
#define SDL_PutAudioStreamDataNoCopy SDL_PutAudioStreamDataNoCopy_REAL
|
||||||
|
#define SDL_IsTraySupported SDL_IsTraySupported_REAL
|
||||||
|
@@ -1287,3 +1287,4 @@ SDL_DYNAPI_PROC(bool,SDL_PutAudioStreamPlanarData,(SDL_AudioStream *a,const void
|
|||||||
SDL_DYNAPI_PROC(bool,SDL_SetAudioIterationCallbacks,(SDL_AudioDeviceID a,SDL_AudioIterationCallback b,SDL_AudioIterationCallback c,void *d),(a,b,c,d),return)
|
SDL_DYNAPI_PROC(bool,SDL_SetAudioIterationCallbacks,(SDL_AudioDeviceID a,SDL_AudioIterationCallback b,SDL_AudioIterationCallback c,void *d),(a,b,c,d),return)
|
||||||
SDL_DYNAPI_PROC(int,SDL_GetEventDescription,(const SDL_Event *a,char *b,int c),(a,b,c),return)
|
SDL_DYNAPI_PROC(int,SDL_GetEventDescription,(const SDL_Event *a,char *b,int c),(a,b,c),return)
|
||||||
SDL_DYNAPI_PROC(bool,SDL_PutAudioStreamDataNoCopy,(SDL_AudioStream *a,const void *b,int c,SDL_AudioStreamDataCompleteCallback d,void *e),(a,b,c,d,e),return)
|
SDL_DYNAPI_PROC(bool,SDL_PutAudioStreamDataNoCopy,(SDL_AudioStream *a,const void *b,int c,SDL_AudioStreamDataCompleteCallback d,void *e),(a,b,c,d,e),return)
|
||||||
|
SDL_DYNAPI_PROC(bool,SDL_IsTraySupported,(void),(),return)
|
||||||
|
@@ -82,6 +82,16 @@ void SDL_UpdateTrays(void)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SDL_IsTraySupported(void)
|
||||||
|
{
|
||||||
|
if (!SDL_IsMainThread()) {
|
||||||
|
SDL_SetError("This function should be called on the main thread");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
SDL_Tray *SDL_CreateTray(SDL_Surface *icon, const char *tooltip)
|
SDL_Tray *SDL_CreateTray(SDL_Surface *icon, const char *tooltip)
|
||||||
{
|
{
|
||||||
if (!SDL_IsMainThread()) {
|
if (!SDL_IsMainThread()) {
|
||||||
|
@@ -29,6 +29,11 @@ void SDL_UpdateTrays(void)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SDL_IsTraySupported(void)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
SDL_Tray *SDL_CreateTray(SDL_Surface *icon, const char *tooltip)
|
SDL_Tray *SDL_CreateTray(SDL_Surface *icon, const char *tooltip)
|
||||||
{
|
{
|
||||||
SDL_Unsupported();
|
SDL_Unsupported();
|
||||||
|
@@ -413,6 +413,24 @@ void SDL_UpdateTrays(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SDL_IsTraySupported(void)
|
||||||
|
{
|
||||||
|
if (!SDL_IsMainThread()) {
|
||||||
|
SDL_SetError("This function should be called on the main thread");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool has_trays = false;
|
||||||
|
static bool has_been_detected_once = false;
|
||||||
|
|
||||||
|
if (!has_been_detected_once) {
|
||||||
|
has_trays = init_gtk();
|
||||||
|
has_been_detected_once = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return has_trays;
|
||||||
|
}
|
||||||
|
|
||||||
SDL_Tray *SDL_CreateTray(SDL_Surface *icon, const char *tooltip)
|
SDL_Tray *SDL_CreateTray(SDL_Surface *icon, const char *tooltip)
|
||||||
{
|
{
|
||||||
if (!SDL_IsMainThread()) {
|
if (!SDL_IsMainThread()) {
|
||||||
|
@@ -216,6 +216,16 @@ void SDL_UpdateTrays(void)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SDL_IsTraySupported(void)
|
||||||
|
{
|
||||||
|
if (!SDL_IsMainThread()) {
|
||||||
|
SDL_SetError("This function should be called on the main thread");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
SDL_Tray *SDL_CreateTray(SDL_Surface *icon, const char *tooltip)
|
SDL_Tray *SDL_CreateTray(SDL_Surface *icon, const char *tooltip)
|
||||||
{
|
{
|
||||||
if (!SDL_IsMainThread()) {
|
if (!SDL_IsMainThread()) {
|
||||||
|
Reference in New Issue
Block a user