/** ****************************************************************************** * Xenia : Xbox 360 Emulator Research Project * ****************************************************************************** * Copyright 2020 Ben Vanik. All rights reserved. * * Released under the BSD license - see LICENSE in the root for more details. * ****************************************************************************** */ #include #include #include #include #include "xenia/base/assert.h" #include "xenia/base/logging.h" #include "xenia/base/string.h" #include "xenia/base/system.h" // Use headers in third party to not depend on system sdl headers for building #include "third_party/SDL2/include/SDL.h" namespace xe { void LaunchWebBrowser(const std::string_view url) { auto cmd = std::string("xdg-open "); cmd.append(url); system(cmd.c_str()); } void LaunchFileExplorer(const std::filesystem::path& path) { assert_always(); } void ShowSimpleMessageBox(SimpleMessageBoxType type, std::string_view message) { void* libsdl2 = dlopen("libSDL2.so", RTLD_LAZY | RTLD_LOCAL); assert_not_null(libsdl2); if (libsdl2) { auto* pSDL_ShowSimpleMessageBox = reinterpret_cast( dlsym(libsdl2, "SDL_ShowSimpleMessageBox")); assert_not_null(pSDL_ShowSimpleMessageBox); if (pSDL_ShowSimpleMessageBox) { Uint32 flags; const char* title; char* message_copy = reinterpret_cast(alloca(message.size() + 1)); std::memcpy(message_copy, message.data(), message.size()); message_copy[message.size()] = '\0'; switch (type) { default: case SimpleMessageBoxType::Help: title = "Xenia Help"; flags = SDL_MESSAGEBOX_INFORMATION; break; case SimpleMessageBoxType::Warning: title = "Xenia Warning"; flags = SDL_MESSAGEBOX_WARNING; break; case SimpleMessageBoxType::Error: title = "Xenia Error"; flags = SDL_MESSAGEBOX_ERROR; break; } pSDL_ShowSimpleMessageBox(flags, title, message_copy, NULL); } dlclose(libsdl2); } } } // namespace xe