Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion Build/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ ubuntu:
-DTOOLCHAIN_OPENSSL=OFF" generic

ubuntu22:
$(MAKE) UBUNTUDIR=$@ ubuntu
$(MAKE) UBUNTUDIR=$@ CMAKE_EXTRA+="-DBUILD_TEAMTALK_CLIENT_PRISM=OFF" ubuntu

ubuntu24:
$(MAKE) UBUNTUDIR=$@ ubuntu
Expand Down Expand Up @@ -198,8 +198,10 @@ depend-ubuntu24:
g++ \
junit4 \
libasound2-dev \
libglib2.0-dev \
libpcap-dev \
libpulse-dev \
libspeechd-dev \
libssl-dev \
libtool \
libxss-dev \
Expand Down Expand Up @@ -243,8 +245,10 @@ depend-raspios12:
git \
junit4 \
libasound2-dev \
libglib2.0-dev \
libpcap-dev \
libpulse-dev \
libspeechd-dev \
libssl-dev \
libtool \
libxss-dev \
Expand Down
5 changes: 4 additions & 1 deletion ChangeLog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@

Version 5.22.1, unreleased
Default Qt Client
-
- Replaced Tolk with Prism for screen reader support
- Screen reader backend can now be selected in Preferences (e.g. NVDA, JAWS, SAPI, UIA, Orca)
- Added screen reader support on Linux via Speech Dispatcher and Orca
- First launch now asks all users whether to enable accessibility settings
Android Client
-
iOS Client
Expand Down
10 changes: 5 additions & 5 deletions Client/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
project (TeamTalkClients)

if (MSVC)
option (BUILD_TEAMTALK_CLIENT_PRISM "Build TeamTalk clients with Prism screen reader support" ON)
if (BUILD_TEAMTALK_CLIENT_PRISM)
add_subdirectory (Prism)
endif()

option (BUILD_TEAMTALK_CLIENT_TOLK "Build TeamTalk clients with Tolk" ON)
if (BUILD_TEAMTALK_CLIENT_TOLK)
add_subdirectory (Tolk)
endif()
if (MSVC)

add_subdirectory (TeamTalkClassic)
if (CMAKE_CSharp_COMPILER)
Expand Down
122 changes: 122 additions & 0 deletions Client/Prism/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
project(Prism)

include(ExternalProject)

##################################################
# Prism
##################################################

set(PRISM_INSTALL_DIR_MD ${CMAKE_CURRENT_BINARY_DIR}/Prism-MD)
set(PRISM_INSTALL_DIR_MT ${CMAKE_CURRENT_BINARY_DIR}/Prism-MT)

if (WIN32)
set (PRISM_STATIC_LIB_MD ${PRISM_INSTALL_DIR_MD}/lib/prism.lib)
set (PRISM_STATIC_LIB_MT ${PRISM_INSTALL_DIR_MT}/lib/prism.lib)
else()
set (PRISM_STATIC_LIB_MD ${PRISM_INSTALL_DIR_MD}/lib/libprism.a)
endif()

set(PRISM_COMMON_CMAKE_ARGS
-DBUILD_SHARED_LIBS=OFF
-DPRISM_ENABLE_GDEXTENSION=OFF
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES})

ExternalProject_Add(prism-md-src
GIT_REPOSITORY https://github.com/ethindp/prism.git
GIT_TAG v0.11.3
UPDATE_COMMAND ""
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> ${PRISM_COMMON_CMAKE_ARGS}
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release
INSTALL_DIR ${PRISM_INSTALL_DIR_MD}
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config Release
BUILD_BYPRODUCTS ${PRISM_STATIC_LIB_MD}
)

ExternalProject_Get_Property(prism-md-src INSTALL_DIR)
ExternalProject_Get_Property(prism-md-src BINARY_DIR)
file(MAKE_DIRECTORY ${INSTALL_DIR}/include)

add_library(Prism STATIC IMPORTED GLOBAL)
add_dependencies(Prism prism-md-src)
target_include_directories(Prism INTERFACE ${INSTALL_DIR}/include)
target_compile_definitions(Prism INTERFACE PRISM_STATIC)
set_target_properties(Prism PROPERTIES
IMPORTED_LOCATION ${PRISM_STATIC_LIB_MD}
IMPORTED_LOCATION_DEBUG ${PRISM_STATIC_LIB_MD})

if (WIN32)
foreach (implib SystemAccess ZDSR BoyCtrl PCTalker)
set (_implib_path ${BINARY_DIR}/${implib}.lib)
add_library(Prism_${implib} SHARED IMPORTED GLOBAL)
add_dependencies(Prism_${implib} prism-md-src)
set_target_properties(Prism_${implib} PROPERTIES IMPORTED_IMPLIB ${_implib_path})
endforeach()

target_link_libraries(Prism INTERFACE
rpcrt4 delayimp onecore uiautomationcore ole32 oleaut32
Prism_SystemAccess Prism_ZDSR Prism_BoyCtrl Prism_PCTalker)
target_link_options(Prism INTERFACE
"/WHOLEARCHIVE:$<TARGET_LINKER_FILE:Prism>"
/delayload:SAAPI64.dll /delayload:ZDSRAPI_x64.dll
/delayload:BoyCtrl-x64.dll /delayload:PCTKUSR.dll)

ExternalProject_Add(prism-mt-src
GIT_REPOSITORY https://github.com/ethindp/prism.git
GIT_TAG v0.11.3
UPDATE_COMMAND ""
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> ${PRISM_COMMON_CMAKE_ARGS}
-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release
INSTALL_DIR ${PRISM_INSTALL_DIR_MT}
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config Release
BUILD_BYPRODUCTS ${PRISM_STATIC_LIB_MT}
)

ExternalProject_Get_Property(prism-mt-src INSTALL_DIR)
ExternalProject_Get_Property(prism-mt-src BINARY_DIR)
file(MAKE_DIRECTORY ${INSTALL_DIR}/include)

add_library(PrismMT STATIC IMPORTED GLOBAL)
add_dependencies(PrismMT prism-mt-src)
target_include_directories(PrismMT INTERFACE ${INSTALL_DIR}/include)
target_compile_definitions(PrismMT INTERFACE PRISM_STATIC)
set_target_properties(PrismMT PROPERTIES
IMPORTED_LOCATION ${PRISM_STATIC_LIB_MT}
IMPORTED_LOCATION_DEBUG ${PRISM_STATIC_LIB_MT})

foreach (implib SystemAccess ZDSR BoyCtrl PCTalker)
set (_implib_path ${BINARY_DIR}/${implib}.lib)
add_library(PrismMT_${implib} SHARED IMPORTED GLOBAL)
add_dependencies(PrismMT_${implib} prism-mt-src)
set_target_properties(PrismMT_${implib} PROPERTIES IMPORTED_IMPLIB ${_implib_path})
endforeach()

target_link_libraries(PrismMT INTERFACE
rpcrt4 delayimp onecore uiautomationcore ole32 oleaut32
PrismMT_SystemAccess PrismMT_ZDSR PrismMT_BoyCtrl PrismMT_PCTalker)
target_link_options(PrismMT INTERFACE
"/WHOLEARCHIVE:$<TARGET_LINKER_FILE:PrismMT>"
/delayload:SAAPI64.dll /delayload:ZDSRAPI_x64.dll
/delayload:BoyCtrl-x64.dll /delayload:PCTKUSR.dll)

elseif (APPLE)
find_library(AVFOUNDATION_FRAMEWORK AVFoundation)
find_library(FOUNDATION_FRAMEWORK Foundation)
target_link_libraries(Prism INTERFACE ${AVFOUNDATION_FRAMEWORK} ${FOUNDATION_FRAMEWORK})
target_link_options(Prism INTERFACE "LINKER:-force_load,$<TARGET_LINKER_FILE:Prism>")
else()
find_package(PkgConfig)
if (PkgConfig_FOUND)
pkg_check_modules(SPEECHD IMPORTED_TARGET speech-dispatcher)
pkg_check_modules(GLIB IMPORTED_TARGET glib-2.0)
pkg_check_modules(GIO IMPORTED_TARGET gio-2.0)
if (SPEECHD_FOUND)
target_link_libraries(Prism INTERFACE PkgConfig::SPEECHD)
endif()
if (GLIB_FOUND AND GIO_FOUND)
target_link_libraries(Prism INTERFACE PkgConfig::GLIB PkgConfig::GIO)
endif()
endif()
target_link_options(Prism INTERFACE
"LINKER:--whole-archive" "$<TARGET_LINKER_FILE:Prism>" "LINKER:--no-whole-archive")
endif()
27 changes: 9 additions & 18 deletions Client/TeamTalkClassic/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -84,25 +84,16 @@ if (MSVC)
if (BUILD_TEAMTALK_CLIENT_TEAMTALKCLASSIC)
set_property(TARGET TeamTalk5Classic PROPERTY VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../Library/TeamTalk_DLL")

if (BUILD_TEAMTALK_CLIENT_TOLK)
target_compile_options (TeamTalk5Classic PUBLIC -DENABLE_TOLK ${TTCLASSIC_COMPILE_FLAGS})
install (FILES ${TOLK_DLL_FILES} DESTINATION Client/TeamTalkClassic)
if (BUILD_TEAMTALK_LIBRARY_DLL)
target_include_directories (TeamTalk5Classic PUBLIC ./)
target_link_libraries (TeamTalk5Classic TeamTalk5DLL Tolk tinyxml2-classic)
else()
target_include_directories (TeamTalk5Classic PUBLIC ./ ../../Library/TeamTalk_DLL)
target_link_libraries (TeamTalk5Classic TeamTalk5 Tolk tinyxml2-classic)
endif()
target_compile_options (TeamTalk5Classic PUBLIC ${TTCLASSIC_COMPILE_FLAGS})
if (BUILD_TEAMTALK_CLIENT_PRISM)
target_compile_definitions (TeamTalk5Classic PUBLIC ENABLE_PRISM)
endif()
if (BUILD_TEAMTALK_LIBRARY_DLL)
target_include_directories (TeamTalk5Classic PUBLIC ./)
target_link_libraries (TeamTalk5Classic TeamTalk5DLL tinyxml2-classic $<$<BOOL:${BUILD_TEAMTALK_CLIENT_PRISM}>:PrismMT>)
else()
target_compile_options (TeamTalk5Classic PUBLIC ${TTCLASSIC_COMPILE_FLAGS})
if (BUILD_TEAMTALK_LIBRARY_DLL)
target_include_directories (TeamTalk5Classic PUBLIC ./)
target_link_libraries (TeamTalk5Classic TeamTalk5DLL tinyxml2-classic)
else()
target_include_directories (TeamTalk5Classic PUBLIC ./ ../../Library/TeamTalk_DLL)
target_link_libraries (TeamTalk5Classic TeamTalk5 tinyxml2-classic)
endif()
target_include_directories (TeamTalk5Classic PUBLIC ./ ../../Library/TeamTalk_DLL)
target_link_libraries (TeamTalk5Classic TeamTalk5 tinyxml2-classic $<$<BOOL:${BUILD_TEAMTALK_CLIENT_PRISM}>:PrismMT>)
endif()
set_output_dir(TeamTalk5Classic "${CMAKE_CURRENT_SOURCE_DIR}/")
install (TARGETS TeamTalk5Classic DESTINATION Client/TeamTalkClassic)
Expand Down
10 changes: 7 additions & 3 deletions Client/TeamTalkClassic/Helper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -644,8 +644,12 @@ extern BOOL g_bSpeech;

void AddTextToSpeechMessage(const CString& szMsg)
{
#if defined(ENABLE_TOLK)
if(g_bSpeech)
Tolk_Output(szMsg);
#if defined(ENABLE_PRISM)
extern PrismBackend* g_prismBackend;
if (g_bSpeech && g_prismBackend)
{
CStringA utf8(szMsg);
prism_backend_output(g_prismBackend, utf8, true);
}
#endif
}
4 changes: 2 additions & 2 deletions Client/TeamTalkClassic/Helper.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@

#include "settings/ClientXML.h"

#if defined(ENABLE_TOLK)
#include <Tolk.h>
#if defined(ENABLE_PRISM)
#include <prism.h>
#endif

typedef struct
Expand Down
42 changes: 33 additions & 9 deletions Client/TeamTalkClassic/TeamTalkDlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -160,18 +160,35 @@ void CTeamTalkDlg::EnableVoiceActivation(BOOL bEnable,
PlaySoundEvent(bEnable? on : off);
}

#if defined(ENABLE_PRISM)
PrismContext* g_prismContext = nullptr;
PrismBackend* g_prismBackend = nullptr;
#endif

void CTeamTalkDlg::EnableSpeech(BOOL bEnable)
{
#if defined(ENABLE_TOLK)
if(g_bSpeech)
#if defined(ENABLE_PRISM)
if (g_prismBackend)
{
Tolk_Unload();
prism_backend_free(g_prismBackend);
g_prismBackend = nullptr;
}
if (g_prismContext)
{
prism_shutdown(g_prismContext);
g_prismContext = nullptr;
}

if(bEnable)
if (bEnable)
{
Tolk_Load();
Tolk_TrySAPI(true);
PrismConfig cfg = prism_config_init();
g_prismContext = prism_init(&cfg);
if (g_prismContext)
{
g_prismBackend = prism_registry_create_best(g_prismContext);
if (g_prismBackend)
prism_backend_initialize(g_prismBackend);
}
}
#endif
g_bSpeech = bEnable;
Expand Down Expand Up @@ -2970,9 +2987,16 @@ void CTeamTalkDlg::Exit()

//Close TeamTalk DLLs
TT_CloseTeamTalk(ttInst);
#if defined(ENABLE_TOLK)
if (Tolk_IsLoaded()) {
Tolk_Unload();
#if defined(ENABLE_PRISM)
if (g_prismBackend)
{
prism_backend_free(g_prismBackend);
g_prismBackend = nullptr;
}
if (g_prismContext)
{
prism_shutdown(g_prismContext);
g_prismContext = nullptr;
}
#endif
m_xmlSettings.SaveFile();
Expand Down
4 changes: 2 additions & 2 deletions Client/TeamTalkClassic/TeamTalkDlg.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@
#include "HttpRequest.h"
#include "PlaySoundThread.h"

#if defined(ENABLE_TOLK)
#include <Tolk.h>
#if defined(ENABLE_PRISM)
#include <prism.h>
#endif

#include <vector>
Expand Down
4 changes: 0 additions & 4 deletions Client/TeamTalkClassic/gui/SoundEventsPage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,6 @@
#include "Resource.h"
#include "SoundEventsPage.h"

#if defined(ENABLE_TOLK)
#include <Tolk.h>
#endif

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
Expand Down
Loading
Loading