[compat] fix solaris Qt build (#194)

Co-authored-by: crueter <crueter@eden-emu.dev>
Reviewed-on: #194
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
This commit is contained in:
lizzie 2025-08-15 04:12:45 +02:00 committed by crueter
parent c39e3bece6
commit e807e32b1a
Signed by: crueter
GPG key ID: 425ACD2D4830EBC6
21 changed files with 105 additions and 76 deletions

View file

@ -7,6 +7,11 @@ project(yuzu)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules")
if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
# Terrific Solaris pkg shenanigans
list(APPEND CMAKE_PREFIX_PATH "/usr/lib/qt/6.6/lib/amd64/cmake")
list(APPEND CMAKE_MODULE_PATH "/usr/lib/qt/6.6/lib/amd64/cmake")
endif()
set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm) set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm)
@ -649,8 +654,10 @@ if (ENABLE_QT)
find_package(Qt6 REQUIRED COMPONENTS Multimedia) find_package(Qt6 REQUIRED COMPONENTS Multimedia)
endif() endif()
if (UNIX AND NOT APPLE) if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
find_package(Qt6 REQUIRED COMPONENTS DBus GuiPrivate) find_package(Qt6 REQUIRED COMPONENTS DBus GuiPrivate)
elseif (UNIX AND NOT APPLE)
find_package(Qt6 REQUIRED COMPONENTS DBus Gui)
endif() endif()
if (ENABLE_QT_TRANSLATION) if (ENABLE_QT_TRANSLATION)

View file

@ -104,6 +104,7 @@ Then type `target remote localhost:1234` and type `c` (for continue) - and then
- `br <expr>`: Set breakpoint at `<expr>`. - `br <expr>`: Set breakpoint at `<expr>`.
- `delete`: Deletes all breakpoints. - `delete`: Deletes all breakpoints.
- `catch throw`: Breakpoint at throw. Can also use `br __cxa_throw` - `catch throw`: Breakpoint at throw. Can also use `br __cxa_throw`
- `br _mesa_error`: Break on mesa errors (set environment variable `MESA_DEBUG=1` beforehand), see [MESA_DEBUG](https://mesa-docs.readthedocs.io/en/latest/debugging.html).
Expressions can be `variable_names` or `1234` (numbers) or `*var` (dereference of a pointer) or `*(1 + var)` (computed expression). Expressions can be `variable_names` or `1234` (numbers) or `*var` (dereference of a pointer) or `*(1 + var)` (computed expression).

13
docs/build/Solaris.md vendored
View file

@ -87,6 +87,19 @@ export PATH="$PATH:$PWD"
- **Build**: `cmake --build build`. - **Build**: `cmake --build build`.
- **Installing**: `sudo cmake --install build`. - **Installing**: `sudo cmake --install build`.
### Running
Default Mesa is a bit outdated, the following environment variables should be set for a smoother experience:
```sh
export MESA_GL_VERSION_OVERRIDE=4.6
export MESA_GLSL_VERSION_OVERRIDE=460
export MESA_EXTENSION_MAX_YEAR=2025
export MESA_DEBUG=1
export MESA_VK_VERSION_OVERRIDE=1.3
# Only if nvidia/intel drm drivers cause crashes, will severely hinder performance
export LIBGL_ALWAYS_SOFTWARE=1
```
### Notes ### Notes
- Modify the generated ffmpeg.make (in build dir) if using multiple threads (base system `make` doesn't use `-j4`, so change for `gmake`). - Modify the generated ffmpeg.make (in build dir) if using multiple threads (base system `make` doesn't use `-j4`, so change for `gmake`).

View file

@ -205,8 +205,8 @@ NetPlayStatus AndroidMultiplayer::NetPlayCreateRoom(const std::string &ipaddress
std::string token; std::string token;
// TODO(alekpop): properly handle the compile definition, it's not working right // TODO(alekpop): properly handle the compile definition, it's not working right
//#ifdef ENABLE_WEB_SERVICE #ifdef ENABLE_WEB_SERVICE
// LOG_INFO(WebService, "Web Service enabled"); LOG_INFO(WebService, "Web Service enabled");
if (isPublic) { if (isPublic) {
WebService::Client client(Settings::values.web_api_url.GetValue(), WebService::Client client(Settings::values.web_api_url.GetValue(),
Settings::values.eden_username.GetValue(), Settings::values.eden_username.GetValue(),
@ -220,9 +220,9 @@ NetPlayStatus AndroidMultiplayer::NetPlayCreateRoom(const std::string &ipaddress
LOG_INFO(WebService, "Successfully requested external JWT: size={}", token.size()); LOG_INFO(WebService, "Successfully requested external JWT: size={}", token.size());
} }
} }
//#else #else
// LOG_INFO(WebService, "Web Service disabled"); LOG_ERROR(WebService, "Web Service disabled");
//#endif #endif
member->Join(username, ipaddress.c_str(), static_cast<u16>(port), 0, Network::NoPreferredIP, member->Join(username, ipaddress.c_str(), static_cast<u16>(port), 0, Network::NoPreferredIP,
password, token); password, token);
@ -432,12 +432,12 @@ std::vector<std::string> AndroidMultiplayer::NetPlayGetBanList() {
std::unique_ptr<Network::VerifyUser::Backend> AndroidMultiplayer::CreateVerifyBackend(bool use_validation) { std::unique_ptr<Network::VerifyUser::Backend> AndroidMultiplayer::CreateVerifyBackend(bool use_validation) {
std::unique_ptr<Network::VerifyUser::Backend> verify_backend; std::unique_ptr<Network::VerifyUser::Backend> verify_backend;
if (use_validation) { if (use_validation) {
//#ifdef ENABLE_WEB_SERVICE #ifdef ENABLE_WEB_SERVICE
verify_backend = verify_backend =
std::make_unique<WebService::VerifyUserJWT>(Settings::values.web_api_url.GetValue()); std::make_unique<WebService::VerifyUserJWT>(Settings::values.web_api_url.GetValue());
//#else #else
// verify_backend = std::make_unique<Network::VerifyUser::NullBackend>(); verify_backend = std::make_unique<Network::VerifyUser::NullBackend>();
//#endif #endif
} else { } else {
verify_backend = std::make_unique<Network::VerifyUser::NullBackend>(); verify_backend = std::make_unique<Network::VerifyUser::NullBackend>();
} }

View file

@ -442,16 +442,15 @@ static int shm_open_anon(int flags, mode_t mode) {
for (char *fill = start; fill < limit; r /= 8) for (char *fill = start; fill < limit; r /= 8)
*fill++ = '0' + (r % 8); *fill++ = '0' + (r % 8);
int fd = shm_open(name, flags, mode); int fd = shm_open(name, flags, mode);
if (fd != -1) if (fd != -1) {
return ([](const char *name, int fd) { if (shm_unlink(name) == -1) {
if (shm_unlink(name) == -1) { int tmp = errno;
int tmp = errno; close(fd);
close(fd); errno = tmp;
errno = tmp; return -1;
return -1; }
} return fd;
return fd; }
})(name, fd);
if (errno != EEXIST) if (errno != EEXIST)
break; break;
} }
@ -464,15 +463,13 @@ static int shm_open_anon(int flags, mode_t mode) {
int fd; int fd;
if ((fd = shm_mkstemp(name)) == -1) if ((fd = shm_mkstemp(name)) == -1)
return -1; return -1;
return ([](const char *name, int fd) { if (shm_unlink(name) == -1) {
if (shm_unlink(name) == -1) { int tmp = errno;
int tmp = errno; close(fd);
close(fd); errno = tmp;
errno = tmp; return -1;
return -1; }
} return fd;
return fd;
})(name, fd);
} }
#endif #endif

View file

@ -1199,8 +1199,8 @@ if (MINGW)
endif() endif()
if (ENABLE_WEB_SERVICE) if (ENABLE_WEB_SERVICE)
target_compile_definitions(core PRIVATE -DENABLE_WEB_SERVICE) target_compile_definitions(core PUBLIC -DENABLE_WEB_SERVICE)
target_link_libraries(core PRIVATE web_service) target_link_libraries(core PUBLIC web_service)
endif() endif()
if (HAS_NCE) if (HAS_NCE)

View file

@ -12,7 +12,7 @@
#ifdef _WIN32 #ifdef _WIN32
#include <winsock2.h> #include <winsock2.h>
#include <ws2tcpip.h> #include <ws2tcpip.h>
#elif YUZU_UNIX #elif defined(__unix__)
#include <arpa/inet.h> #include <arpa/inet.h>
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
@ -77,7 +77,7 @@ SOCKET GetInterruptSocket() {
sockaddr TranslateFromSockAddrIn(SockAddrIn input) { sockaddr TranslateFromSockAddrIn(SockAddrIn input) {
sockaddr_in result; sockaddr_in result;
#if YUZU_UNIX #ifdef __unix__
result.sin_len = sizeof(result); result.sin_len = sizeof(result);
#endif #endif
@ -162,7 +162,7 @@ Errno TranslateNativeError(int e, CallType call_type = CallType::Other) {
} }
} }
#elif YUZU_UNIX // ^ _WIN32 v YUZU_UNIX #elif defined(__unix__) // ^ _WIN32 v __unix__
using SOCKET = int; using SOCKET = int;
using WSAPOLLFD = pollfd; using WSAPOLLFD = pollfd;
@ -835,7 +835,7 @@ std::pair<s32, Errno> Socket::Send(std::span<const u8> message, int flags) {
ASSERT(flags == 0); ASSERT(flags == 0);
int native_flags = 0; int native_flags = 0;
#if YUZU_UNIX #ifdef __unix__
native_flags |= MSG_NOSIGNAL; // do not send us SIGPIPE native_flags |= MSG_NOSIGNAL; // do not send us SIGPIPE
#endif #endif
const auto result = send(fd, reinterpret_cast<const char*>(message.data()), const auto result = send(fd, reinterpret_cast<const char*>(message.data()),

View file

@ -13,7 +13,7 @@
#ifdef _WIN32 #ifdef _WIN32
#include <winsock2.h> #include <winsock2.h>
#elif YUZU_UNIX #else
#include <netinet/in.h> #include <netinet/in.h>
#endif #endif
@ -104,7 +104,7 @@ constexpr IPv4Address TranslateIPv4(in_addr addr) {
auto& bytes = addr.S_un.S_un_b; auto& bytes = addr.S_un.S_un_b;
return IPv4Address{bytes.s_b1, bytes.s_b2, bytes.s_b3, bytes.s_b4}; return IPv4Address{bytes.s_b1, bytes.s_b2, bytes.s_b3, bytes.s_b4};
} }
#elif YUZU_UNIX #elif defined(__unix__)
constexpr IPv4Address TranslateIPv4(in_addr addr) { constexpr IPv4Address TranslateIPv4(in_addr addr) {
const u32 bytes = addr.s_addr; const u32 bytes = addr.s_addr;
return IPv4Address{static_cast<u8>(bytes), static_cast<u8>(bytes >> 8), return IPv4Address{static_cast<u8>(bytes), static_cast<u8>(bytes >> 8),

View file

@ -15,7 +15,7 @@
#include "core/internal_network/socket_proxy.h" #include "core/internal_network/socket_proxy.h"
#include "network/network.h" #include "network/network.h"
#if YUZU_UNIX #ifdef __unix__
#include <sys/socket.h> #include <sys/socket.h>
#endif #endif

View file

@ -9,7 +9,11 @@
#include <utility> #include <utility>
#if defined(_WIN32) #if defined(_WIN32)
#elif !YUZU_UNIX // windows
#elif defined(__unix__)
// unix
#else
// haiku
#error "Platform not implemented" #error "Platform not implemented"
#endif #endif
@ -24,7 +28,7 @@ struct ProxyPacket;
class SocketBase { class SocketBase {
public: public:
#ifdef YUZU_UNIX #ifdef __unix__
using SOCKET = int; using SOCKET = int;
static constexpr SOCKET INVALID_SOCKET = -1; static constexpr SOCKET INVALID_SOCKET = -1;
static constexpr SOCKET SOCKET_ERROR = -1; static constexpr SOCKET SOCKET_ERROR = -1;

View file

@ -13,9 +13,9 @@
#include "common/settings.h" #include "common/settings.h"
#include "network/network.h" #include "network/network.h"
//#ifdef ENABLE_WEB_SERVICE #ifdef ENABLE_WEB_SERVICE
#include "web_service/announce_room_json.h" #include "web_service/announce_room_json.h"
//#endif #endif
namespace Core { namespace Core {
@ -28,7 +28,7 @@ AnnounceMultiplayerSession::AnnounceMultiplayerSession() {
Settings::values.eden_username.GetValue(), Settings::values.eden_username.GetValue(),
Settings::values.eden_token.GetValue()); Settings::values.eden_token.GetValue());
#else #else
backend = std::make_unique<AnnounceMultiplayerRoom::NullBackend>(); backend = std::make_unique<AnnounceMultiplayerRoom::NullBackend>();
#endif #endif
} }
@ -155,11 +155,12 @@ bool AnnounceMultiplayerSession::IsRunning() const {
void AnnounceMultiplayerSession::UpdateCredentials() { void AnnounceMultiplayerSession::UpdateCredentials() {
ASSERT_MSG(!IsRunning(), "Credentials can only be updated when session is not running"); ASSERT_MSG(!IsRunning(), "Credentials can only be updated when session is not running");
#ifdef ENABLE_WEB_SERVICE #ifdef ENABLE_WEB_SERVICE
backend = std::make_unique<WebService::RoomJson>(Settings::values.web_api_url.GetValue(), backend = std::make_unique<WebService::RoomJson>(Settings::values.web_api_url.GetValue(),
Settings::values.eden_username.GetValue(), Settings::values.eden_username.GetValue(),
Settings::values.eden_token.GetValue()); Settings::values.eden_token.GetValue());
#else
backend = std::make_unique<AnnounceMultiplayerRoom::NullBackend>();
#endif #endif
} }

View file

@ -24,6 +24,8 @@ using namespace Common::Literals;
namespace OpenGL { namespace OpenGL {
namespace { namespace {
// TODO: Needs to explicitly enable ARB_TESSELLATION_SHADER for GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS
constexpr std::array LIMIT_UBOS = { constexpr std::array LIMIT_UBOS = {
GL_MAX_VERTEX_UNIFORM_BLOCKS, GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS, GL_MAX_VERTEX_UNIFORM_BLOCKS, GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS,
GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS, GL_MAX_GEOMETRY_UNIFORM_BLOCKS, GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS, GL_MAX_GEOMETRY_UNIFORM_BLOCKS,
@ -62,7 +64,7 @@ bool HasExtension(std::span<const std::string_view> extensions, std::string_view
} }
std::array<u32, Shader::MaxStageTypes> BuildMaxUniformBuffers() noexcept { std::array<u32, Shader::MaxStageTypes> BuildMaxUniformBuffers() noexcept {
std::array<u32, Shader::MaxStageTypes> max; std::array<u32, Shader::MaxStageTypes> max{};
std::ranges::transform(LIMIT_UBOS, max.begin(), &GetInteger<u32>); std::ranges::transform(LIMIT_UBOS, max.begin(), &GetInteger<u32>);
return max; return max;
} }
@ -108,7 +110,7 @@ bool IsASTCSupported() {
static bool HasSlowSoftwareAstc(std::string_view vendor_name, std::string_view renderer) { static bool HasSlowSoftwareAstc(std::string_view vendor_name, std::string_view renderer) {
// ifdef for Unix reduces string comparisons for non-Windows drivers, and Intel // ifdef for Unix reduces string comparisons for non-Windows drivers, and Intel
#ifdef YUZU_UNIX #ifdef __unix__
// Sorted vaguely by how likely a vendor is to appear // Sorted vaguely by how likely a vendor is to appear
if (vendor_name == "AMD") { if (vendor_name == "AMD") {
// RadeonSI // RadeonSI

View file

@ -60,6 +60,7 @@ size_t StagingBuffers::RequestBuffer(size_t requested_size) {
storage_flags | GL_MAP_PERSISTENT_BIT); storage_flags | GL_MAP_PERSISTENT_BIT);
alloc.map = static_cast<u8*>(glMapNamedBufferRange(alloc.buffer.handle, 0, next_pow2_size, alloc.map = static_cast<u8*>(glMapNamedBufferRange(alloc.buffer.handle, 0, next_pow2_size,
map_flags | GL_MAP_PERSISTENT_BIT)); map_flags | GL_MAP_PERSISTENT_BIT));
DEBUG_ASSERT(alloc.map != nullptr);
alloc.size = next_pow2_size; alloc.size = next_pow2_size;
allocs.emplace_back(std::move(alloc)); allocs.emplace_back(std::move(alloc));
return allocs.size() - 1; return allocs.size() - 1;

View file

@ -497,6 +497,11 @@ if (YUZU_ROOM)
target_link_libraries(yuzu PRIVATE yuzu-room) target_link_libraries(yuzu PRIVATE yuzu-room)
endif() endif()
# Explicit linking required
if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
target_link_libraries(yuzu PRIVATE X11)
endif()
# Extra deps # Extra deps
add_subdirectory(externals) add_subdirectory(externals)
target_link_libraries(yuzu PRIVATE QuaZip::QuaZip) target_link_libraries(yuzu PRIVATE QuaZip::QuaZip)

View file

@ -295,7 +295,7 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) {
api_restore_global_button = widget->restore_button; api_restore_global_button = widget->restore_button;
if (!Settings::IsConfiguringGlobal()) { if (!Settings::IsConfiguringGlobal()) {
QObject::connect(api_restore_global_button, &QAbstractButton::clicked, api_restore_global_button->connect(api_restore_global_button, &QAbstractButton::clicked,
[this](bool) { UpdateAPILayout(); }); [this](bool) { UpdateAPILayout(); });
// Detach API's restore button and place it where we want // Detach API's restore button and place it where we want
@ -327,7 +327,7 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) {
restore_button->setEnabled(true); restore_button->setEnabled(true);
widget->layout()->addWidget(restore_button); widget->layout()->addWidget(restore_button);
QObject::connect(restore_button, &QAbstractButton::clicked, restore_button->connect(restore_button, &QAbstractButton::clicked,
[restore_button, this](bool) { [restore_button, this](bool) {
Settings::values.vsync_mode.SetGlobal(true); Settings::values.vsync_mode.SetGlobal(true);
PopulateVSyncModeSelection(true); PopulateVSyncModeSelection(true);
@ -340,7 +340,7 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) {
UpdateVsyncSetting(); UpdateVsyncSetting();
restore_button->setVisible(true); restore_button->setVisible(true);
}; };
QObject::connect(widget->combobox, QOverload<int>::of(&QComboBox::activated), widget->combobox->connect(widget->combobox, QOverload<int>::of(&QComboBox::activated),
[set_non_global]() { set_non_global(); }); [set_non_global]() { set_non_global(); });
vsync_restore_global_button = restore_button; vsync_restore_global_button = restore_button;
} }
@ -379,7 +379,7 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) {
Settings::values.bg_red.UsingGlobal(), ui->bg_widget); Settings::values.bg_red.UsingGlobal(), ui->bg_widget);
ui->bg_widget->layout()->addWidget(bg_restore_button); ui->bg_widget->layout()->addWidget(bg_restore_button);
QObject::connect(bg_restore_button, &QAbstractButton::clicked, bg_restore_button->connect(bg_restore_button, &QAbstractButton::clicked,
[bg_restore_button, this](bool) { [bg_restore_button, this](bool) {
const int r = Settings::values.bg_red.GetValue(true); const int r = Settings::values.bg_red.GetValue(true);
const int g = Settings::values.bg_green.GetValue(true); const int g = Settings::values.bg_green.GetValue(true);
@ -390,7 +390,7 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) {
bg_restore_button->setEnabled(false); bg_restore_button->setEnabled(false);
}); });
QObject::connect(ui->bg_button, &QAbstractButton::clicked, [bg_restore_button](bool) { ui->bg_button->connect(ui->bg_button, &QAbstractButton::clicked, [bg_restore_button](bool) {
bg_restore_button->setVisible(true); bg_restore_button->setVisible(true);
bg_restore_button->setEnabled(true); bg_restore_button->setEnabled(true);
}); });

View file

@ -2429,7 +2429,7 @@ void PlayerControlPreview::DrawProJoystick(QPainter& p, const QPointF center, co
1.0 - std::sqrt((offset.x() * offset.x()) + (offset.y() * offset.y())) * 0.1f); 1.0 - std::sqrt((offset.x() * offset.x()) + (offset.y() * offset.y())) * 0.1f);
const float rotation = const float rotation =
((offset.x() == 0) ? atan(1) * 2 : atan(offset.y() / offset.x())) * (180 / (atan(1) * 4)); ((offset.x() == 0.f) ? std::atan(1.f) * 2.f : std::atan(offset.y() / offset.x())) * (180.f / (std::atan(1.f) * 4.f));
p.save(); p.save();
p.translate(offset_center); p.translate(offset_center);

View file

@ -118,7 +118,7 @@ QWidget* Widget::CreateCheckBox(Settings::BasicSetting* bool_setting, const QStr
}; };
if (!Settings::IsConfiguringGlobal()) { if (!Settings::IsConfiguringGlobal()) {
QObject::connect(checkbox, &QCheckBox::clicked, [touch]() { touch(); }); checkbox->connect(checkbox, &QCheckBox::clicked, [touch]() { touch(); });
} }
return checkbox; return checkbox;
@ -165,7 +165,7 @@ QWidget* Widget::CreateCombobox(std::function<std::string()>& serializer,
}; };
if (!Settings::IsConfiguringGlobal()) { if (!Settings::IsConfiguringGlobal()) {
QObject::connect(combobox, QOverload<int>::of(&QComboBox::activated), combobox->connect(combobox, QOverload<int>::of(&QComboBox::activated),
[touch]() { touch(); }); [touch]() { touch(); });
} }
@ -223,9 +223,8 @@ QWidget* Widget::CreateRadioGroup(std::function<std::string()>& serializer,
}; };
if (!Settings::IsConfiguringGlobal()) { if (!Settings::IsConfiguringGlobal()) {
for (const auto& [id, button] : radio_buttons) { for (const auto& [id, button] : radio_buttons)
QObject::connect(button, &QAbstractButton::clicked, [touch]() { touch(); }); button->connect(button, &QAbstractButton::clicked, [touch]() { touch(); });
}
} }
return group; return group;
@ -249,7 +248,7 @@ QWidget* Widget::CreateLineEdit(std::function<std::string()>& serializer,
}; };
if (!Settings::IsConfiguringGlobal()) { if (!Settings::IsConfiguringGlobal()) {
QObject::connect(line_edit, &QLineEdit::textChanged, [touch]() { touch(); }); line_edit->connect(line_edit, &QLineEdit::textChanged, [touch]() { touch(); });
} }
return line_edit; return line_edit;
@ -266,7 +265,7 @@ static void CreateIntSlider(Settings::BasicSetting& setting, bool reversed, floa
feedback->setText(use_format.arg(QVariant::fromValue(present).value<QString>())); feedback->setText(use_format.arg(QVariant::fromValue(present).value<QString>()));
}; };
QObject::connect(slider, &QAbstractSlider::valueChanged, update_feedback); slider->connect(slider, &QAbstractSlider::valueChanged, update_feedback);
update_feedback(std::strtol(setting.ToString().c_str(), nullptr, 0)); update_feedback(std::strtol(setting.ToString().c_str(), nullptr, 0));
slider->setMinimum(std::strtol(setting.MinVal().c_str(), nullptr, 0)); slider->setMinimum(std::strtol(setting.MinVal().c_str(), nullptr, 0));
@ -293,7 +292,7 @@ static void CreateFloatSlider(Settings::BasicSetting& setting, bool reversed, fl
feedback->setText(use_format.arg(QVariant::fromValue(present).value<QString>())); feedback->setText(use_format.arg(QVariant::fromValue(present).value<QString>()));
}; };
QObject::connect(slider, &QAbstractSlider::valueChanged, update_feedback); slider->connect(slider, &QAbstractSlider::valueChanged, update_feedback);
update_feedback(std::strtof(setting.ToString().c_str(), nullptr)); update_feedback(std::strtof(setting.ToString().c_str(), nullptr));
slider->setMinimum(min_val * use_multiplier); slider->setMinimum(min_val * use_multiplier);
@ -346,7 +345,7 @@ QWidget* Widget::CreateSlider(bool reversed, float multiplier, const QString& gi
slider->setInvertedAppearance(reversed); slider->setInvertedAppearance(reversed);
if (!Settings::IsConfiguringGlobal()) { if (!Settings::IsConfiguringGlobal()) {
QObject::connect(slider, &QAbstractSlider::actionTriggered, [touch]() { touch(); }); slider->connect(slider, &QAbstractSlider::actionTriggered, [touch]() { touch(); });
} }
return container; return container;
@ -376,7 +375,7 @@ QWidget* Widget::CreateSpinBox(const QString& given_suffix,
}; };
if (!Settings::IsConfiguringGlobal()) { if (!Settings::IsConfiguringGlobal()) {
QObject::connect(spinbox, QOverload<int>::of(&QSpinBox::valueChanged), [this, touch]() { spinbox->connect(spinbox, QOverload<int>::of(&QSpinBox::valueChanged), [this, touch]() {
if (spinbox->value() != std::strtol(setting.ToStringGlobal().c_str(), nullptr, 0)) { if (spinbox->value() != std::strtol(setting.ToStringGlobal().c_str(), nullptr, 0)) {
touch(); touch();
} }
@ -410,7 +409,7 @@ QWidget* Widget::CreateDoubleSpinBox(const QString& given_suffix,
}; };
if (!Settings::IsConfiguringGlobal()) { if (!Settings::IsConfiguringGlobal()) {
QObject::connect(double_spinbox, QOverload<double>::of(&QDoubleSpinBox::valueChanged), double_spinbox->connect(double_spinbox, QOverload<double>::of(&QDoubleSpinBox::valueChanged),
[this, touch]() { [this, touch]() {
if (double_spinbox->value() != if (double_spinbox->value() !=
std::strtod(setting.ToStringGlobal().c_str(), nullptr)) { std::strtod(setting.ToStringGlobal().c_str(), nullptr)) {
@ -453,8 +452,7 @@ QWidget* Widget::CreateHexEdit(std::function<std::string()>& serializer,
restore_func = [this, to_hex]() { line_edit->setText(to_hex(RelevantDefault(setting))); }; restore_func = [this, to_hex]() { line_edit->setText(to_hex(RelevantDefault(setting))); };
if (!Settings::IsConfiguringGlobal()) { if (!Settings::IsConfiguringGlobal()) {
line_edit->connect(line_edit, &QLineEdit::textChanged, [touch]() { touch(); });
QObject::connect(line_edit, &QLineEdit::textChanged, [touch]() { touch(); });
} }
return line_edit; return line_edit;
@ -488,7 +486,7 @@ QWidget* Widget::CreateDateTimeEdit(bool disabled, bool restrict,
restore_func = [this, get_clear_val]() { date_time_edit->setDateTime(get_clear_val()); }; restore_func = [this, get_clear_val]() { date_time_edit->setDateTime(get_clear_val()); };
if (!Settings::IsConfiguringGlobal()) { if (!Settings::IsConfiguringGlobal()) {
QObject::connect(date_time_edit, &QDateTimeEdit::editingFinished, date_time_edit->connect(date_time_edit, &QDateTimeEdit::editingFinished,
[this, get_clear_val, touch]() { [this, get_clear_val, touch]() {
if (date_time_edit->dateTime() != get_clear_val()) { if (date_time_edit->dateTime() != get_clear_val()) {
touch(); touch();
@ -665,7 +663,7 @@ void Widget::SetupComponent(const QString& label, std::function<void()>& load_fu
} else { } else {
layout->addWidget(restore_button); layout->addWidget(restore_button);
QObject::connect(restore_button, &QAbstractButton::clicked, restore_button->connect(restore_button, &QAbstractButton::clicked,
[this, restore_func, checkbox_restore_func](bool) { [this, restore_func, checkbox_restore_func](bool) {
LOG_DEBUG(Frontend, "Restore global state for \"{}\"", LOG_DEBUG(Frontend, "Restore global state for \"{}\"",
setting.GetLabel()); setting.GetLabel());

View file

@ -100,7 +100,7 @@ void DiscordImpl::Update() {
request.setTransferTimeout(3000); request.setTransferTimeout(3000);
QNetworkReply* reply = manager.head(request); QNetworkReply* reply = manager.head(request);
QEventLoop request_event_loop; QEventLoop request_event_loop;
QObject::connect(reply, &QNetworkReply::finished, &request_event_loop, &QEventLoop::quit); reply->connect(reply, &QNetworkReply::finished, &request_event_loop, &QEventLoop::quit);
request_event_loop.exec(); request_event_loop.exec();
UpdateGameStatus(reply->error()); UpdateGameStatus(reply->error());

View file

@ -536,7 +536,7 @@ GMainWindow::GMainWindow(bool has_broken_vulkan)
} }
return QString{}; return QString{};
}); });
QObject::connect(&update_watcher, &QFutureWatcher<QString>::finished, this, update_watcher.connect(&update_watcher, &QFutureWatcher<QString>::finished, this,
&GMainWindow::OnEmulatorUpdateAvailable); &GMainWindow::OnEmulatorUpdateAvailable);
update_watcher.setFuture(update_future); update_watcher.setFuture(update_future);
} }
@ -5786,7 +5786,7 @@ int main(int argc, char* argv[]) {
// After settings have been loaded by GMainWindow, apply the filter // After settings have been loaded by GMainWindow, apply the filter
main_window.show(); main_window.show();
QObject::connect(&app, &QGuiApplication::applicationStateChanged, &main_window, app.connect(&app, &QGuiApplication::applicationStateChanged, &main_window,
&GMainWindow::OnAppFocusStateChanged); &GMainWindow::OnAppFocusStateChanged);
int result = app.exec(); int result = app.exec();

View file

@ -7,7 +7,7 @@
#include <cstring> #include <cstring>
#include <processthreadsapi.h> #include <processthreadsapi.h>
#include <windows.h> #include <windows.h>
#elif defined(YUZU_UNIX) #else
#include <cstring> #include <cstring>
#include <errno.h> #include <errno.h>
#include <spawn.h> #include <spawn.h>
@ -56,7 +56,7 @@ bool CheckEnvVars(bool* is_child) {
IS_CHILD_ENV_VAR, GetLastError()); IS_CHILD_ENV_VAR, GetLastError());
return true; return true;
} }
#elif defined(YUZU_UNIX) #else
const char* startup_check_var = getenv(STARTUP_CHECK_ENV_VAR); const char* startup_check_var = getenv(STARTUP_CHECK_ENV_VAR);
if (startup_check_var != nullptr && if (startup_check_var != nullptr &&
std::strncmp(startup_check_var, ENV_VAR_ENABLED_TEXT, 8) == 0) { std::strncmp(startup_check_var, ENV_VAR_ENABLED_TEXT, 8) == 0) {
@ -110,7 +110,7 @@ bool StartupChecks(const char* arg0, bool* has_broken_vulkan, bool perform_vulka
STARTUP_CHECK_ENV_VAR, GetLastError()); STARTUP_CHECK_ENV_VAR, GetLastError());
} }
#elif defined(YUZU_UNIX) #else
const int env_var_set = setenv(STARTUP_CHECK_ENV_VAR, ENV_VAR_ENABLED_TEXT, 1); const int env_var_set = setenv(STARTUP_CHECK_ENV_VAR, ENV_VAR_ENABLED_TEXT, 1);
if (env_var_set == -1) { if (env_var_set == -1) {
const int err = errno; const int err = errno;
@ -175,7 +175,7 @@ bool SpawnChild(const char* arg0, PROCESS_INFORMATION* pi, int flags) {
return true; return true;
} }
#elif defined(YUZU_UNIX) #else
pid_t SpawnChild(const char* arg0) { pid_t SpawnChild(const char* arg0) {
const pid_t pid = fork(); const pid_t pid = fork();

View file

@ -5,7 +5,7 @@
#ifdef _WIN32 #ifdef _WIN32
#include <windows.h> #include <windows.h>
#elif defined(YUZU_UNIX) #else
#include <sys/types.h> #include <sys/types.h>
#endif #endif
@ -19,6 +19,6 @@ bool StartupChecks(const char* arg0, bool* has_broken_vulkan, bool perform_vulka
#ifdef _WIN32 #ifdef _WIN32
bool SpawnChild(const char* arg0, PROCESS_INFORMATION* pi, int flags); bool SpawnChild(const char* arg0, PROCESS_INFORMATION* pi, int flags);
#elif defined(YUZU_UNIX) #else
pid_t SpawnChild(const char* arg0); pid_t SpawnChild(const char* arg0);
#endif #endif