/*
  Simple DirectMedia Layer
  Copyright (C) 1997-2021 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.
*/

/**
 *  \file SDL_misc.h
 *
 *  \brief Include file for SDL API functions that don't fit elsewhere.
 */

#ifndef SDL_misc_h_
#define SDL_misc_h_

#include "SDL_stdinc.h"

#include "begin_code.h"

/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
extern "C" {
#endif

/**
 * \brief Open an URL / URI in the browser or other
 *
 * Open a URL in a separate, system-provided application. How this works will
 *  vary wildly depending on the platform. This will likely launch what
 *  makes sense to handle a specific URL's protocol (a web browser for http://,
 *  etc), but it might also be able to launch file managers for directories
 *  and other things.
 *
 * What happens when you open a URL varies wildly as well: your game window
 *  may lose focus (and may or may not lose focus if your game was fullscreen
 *  or grabbing input at the time). On mobile devices, your app will likely
 *  move to the background or your process might be paused. Any given platform
 *  may or may not handle a given URL.
 *
 * If this is unimplemented (or simply unavailable) for a platform, this will
 *  fail with an error. A successful result does not mean the URL loaded, just
 *  that we launched something to handle it (or at least believe we did).
 *
 * All this to say: this function can be useful, but you should definitely
 *  test it on every platform you target.
 *
 *   \param url A valid URL to open.
 *  \return 0 on success, or -1 on error.
 */
extern DECLSPEC int SDLCALL SDL_OpenURL(const char *url);

/* Ends C function definitions when using C++ */
#ifdef __cplusplus
}
#endif
#include "close_code.h"

#endif /* SDL_misc_h_ */

/* vi: set ts=4 sw=4 expandtab: */
