mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-06-06 06:34:35 +00:00
misc: Use the OpenURI D-Bus portal for opening URLs
This works inside of containers, and supports passing an activation token with the request, which is needed on Wayland to transfer focus to the browser.
This commit is contained in:
parent
f8feccfa46
commit
682da4ee98
6 changed files with 307 additions and 11 deletions
|
|
@ -25,29 +25,27 @@ static void tryOpenURL(const char *url)
|
|||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
SDLTest_CommonState *state;
|
||||
|
||||
state = SDLTest_CommonCreateState(argv, 0);
|
||||
|
||||
if (!SDL_Init(SDL_INIT_VIDEO)) {
|
||||
SDL_Log("SDL_Init failed: %s", SDL_GetError());
|
||||
return 1;
|
||||
}
|
||||
const char *url = NULL;
|
||||
SDLTest_CommonState *state = SDLTest_CommonCreateState(argv, 0);
|
||||
bool use_gui = false;
|
||||
|
||||
/* Parse commandline */
|
||||
for (i = 1; i < argc;) {
|
||||
for (int i = 1; i < argc;) {
|
||||
int consumed;
|
||||
|
||||
consumed = SDLTest_CommonArg(state, i);
|
||||
if (consumed == 0) {
|
||||
if (argv[i][0] != '-') {
|
||||
tryOpenURL(argv[i]);
|
||||
url = argv[i];
|
||||
consumed = 1;
|
||||
} else if (SDL_strcasecmp(argv[i], "--gui") == 0) {
|
||||
use_gui = true;
|
||||
consumed = 1;
|
||||
}
|
||||
}
|
||||
if (consumed <= 0) {
|
||||
static const char *options[] = {
|
||||
"[--gui]"
|
||||
"[URL [...]]",
|
||||
NULL,
|
||||
};
|
||||
|
|
@ -57,6 +55,38 @@ int main(int argc, char **argv)
|
|||
i += consumed;
|
||||
}
|
||||
|
||||
state->flags = SDL_INIT_VIDEO;
|
||||
if (!SDLTest_CommonInit(state)) {
|
||||
return SDL_APP_FAILURE;
|
||||
}
|
||||
|
||||
if (!use_gui) {
|
||||
tryOpenURL(url);
|
||||
} else {
|
||||
SDL_Event event;
|
||||
bool quit = false;
|
||||
|
||||
while (!quit) {
|
||||
while (SDL_PollEvent(&event)) {
|
||||
if (event.type == SDL_EVENT_KEY_DOWN) {
|
||||
if (event.key.key == SDLK_SPACE) {
|
||||
tryOpenURL(url);
|
||||
} else if (event.key.key == SDLK_ESCAPE) {
|
||||
quit = true;
|
||||
}
|
||||
} else if (event.type == SDL_EVENT_QUIT) {
|
||||
quit = true;
|
||||
}
|
||||
}
|
||||
|
||||
SDL_SetRenderDrawColor(state->renderers[0], 0, 0, 0, 255);
|
||||
SDL_RenderClear(state->renderers[0]);
|
||||
SDL_SetRenderDrawColor(state->renderers[0], 255, 255, 255, 255);
|
||||
SDL_RenderDebugTextFormat(state->renderers[0], 8.f, 16.f, "Press space to open %s", url);
|
||||
SDL_RenderPresent(state->renderers[0]);
|
||||
}
|
||||
}
|
||||
|
||||
SDL_Quit();
|
||||
SDLTest_CommonDestroyState(state);
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue