mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-04-26 11:23:43 +02: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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user