Skip to content

Commit 7edabe2

Browse files
committed
Add URL opening with default browser on macOS
1 parent 626f060 commit 7edabe2

3 files changed

Lines changed: 43 additions & 1 deletion

File tree

CMakeLists.txt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ cmake_minimum_required(VERSION 3.15)
33
set(CMAKE_CXX_STANDARD_REQUIRED ON)
44
set(CMAKE_CXX_STANDARD 17)
55

6+
if (APPLE)
7+
enable_language(OBJCXX)
8+
endif ()
9+
610
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
711

812
include(${PROJECT_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake)
@@ -57,8 +61,16 @@ set(SIMPLEGRAPHIC_SOURCES
5761
"ui_subscript.h"
5862
)
5963

64+
set (SIMPLEGRAPHIC_PLATFORM_SOURCES)
65+
if (APPLE)
66+
set (SIMPLEGRAPHIC_PLATFORM_SOURCES
67+
"engine/system/win/sys_macos.mm"
68+
)
69+
endif()
70+
6071
add_library(SimpleGraphic SHARED
6172
${SIMPLEGRAPHIC_SOURCES}
73+
${SIMPLEGRAPHIC_PLATFORM_SOURCES}
6274
)
6375

6476
target_compile_definitions(SimpleGraphic
@@ -92,6 +104,16 @@ if (CMAKE_SYSTEM_NAME MATCHES "Linux")
92104
)
93105
endif ()
94106

107+
if (APPLE)
108+
find_library(CORE_FOUNDATION_LIBRARY CoreFoundation)
109+
find_library(APPLICATION_SERVICES_LIBRARY ApplicationServices)
110+
target_link_libraries(SimpleGraphic
111+
PRIVATE
112+
${CORE_FOUNDATION_LIBRARY}
113+
${APPLICATION_SERVICES_LIBRARY}
114+
)
115+
endif ()
116+
95117
target_link_libraries(SimpleGraphic
96118
PRIVATE
97119
fmt::fmt

engine/system/win/sys_macos.mm

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#include <string_view>
2+
#include <CoreFoundation/CFBundle.h>
3+
#include <ApplicationServices/ApplicationServices.h>
4+
5+
void PlatformOpenURL(const char* textUrl)
6+
{
7+
std::string_view urlView = textUrl;
8+
CFURLRef url = CFURLCreateWithBytes(nullptr, (const UInt8*)urlView.data(), urlView.size(), kCFStringEncodingUTF8, nullptr);
9+
LSOpenCFURLRef(url, nullptr);
10+
CFRelease(url);
11+
}

engine/system/win/sys_main.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,8 @@ void sys_main_c::SpawnProcess(const char* cmdName, const char* argList)
573573
#endif
574574
}
575575

576-
void sys_main_c::OpenURL(const char* url)
576+
#if _WIN32 || __linux__
577+
void PlatformOpenURL(const char* url)
577578
{
578579
#ifdef _WIN32
579580
ShellExecute(NULL, "open", url, NULL, NULL, SW_SHOWDEFAULT);
@@ -582,6 +583,14 @@ void sys_main_c::OpenURL(const char* url)
582583
// TODO(LV): Implement URL opening for other OSes.
583584
#endif
584585
}
586+
#else
587+
void PlatformOpenURL(const char* url);
588+
#endif
589+
590+
void sys_main_c::OpenURL(const char* url)
591+
{
592+
PlatformOpenURL(url);
593+
}
585594

586595
// ==============================
587596
// System Initialisation/Shutdown

0 commit comments

Comments
 (0)