Qt: enable recent Linux features on more Unices

- Prevent sleep via xdg-desktop-portal after fa7abafa5f
- Pause on suspend after b7642cff36
- Exit on SIGINT/SIGTERM after 9479940a1f
- Improve dark themes after b51db12567
This commit is contained in:
Jan Beich 2022-11-04 12:12:46 +00:00
parent 9fc1bcc7b2
commit d7d7ae8219
4 changed files with 20 additions and 20 deletions

View file

@ -218,11 +218,11 @@ if(ENABLE_QT)
set(QT_VERSION 5.15) set(QT_VERSION 5.15)
# Check for system Qt on Linux, fallback to bundled Qt # Check for system Qt on Linux, fallback to bundled Qt
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") if (UNIX AND NOT APPLE)
if (NOT YUZU_USE_BUNDLED_QT) if (NOT YUZU_USE_BUNDLED_QT)
find_package(Qt5 ${QT_VERSION} COMPONENTS Widgets DBus Multimedia) find_package(Qt5 ${QT_VERSION} COMPONENTS Widgets DBus Multimedia)
endif() endif()
if (NOT Qt5_FOUND OR YUZU_USE_BUNDLED_QT) if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" AND (NOT Qt5_FOUND OR YUZU_USE_BUNDLED_QT))
# Check for dependencies, then enable bundled Qt download # Check for dependencies, then enable bundled Qt download
# Check that the system GLIBCXX version is compatible # Check that the system GLIBCXX version is compatible
@ -323,7 +323,7 @@ if(ENABLE_QT)
set(YUZU_QT_NO_CMAKE_SYSTEM_PATH "NO_CMAKE_SYSTEM_PATH") set(YUZU_QT_NO_CMAKE_SYSTEM_PATH "NO_CMAKE_SYSTEM_PATH")
endif() endif()
if ((${CMAKE_SYSTEM_NAME} STREQUAL "Linux") AND YUZU_USE_BUNDLED_QT) if (UNIX AND NOT APPLE AND YUZU_USE_BUNDLED_QT)
find_package(Qt5 ${QT_VERSION} REQUIRED COMPONENTS Widgets Concurrent Multimedia DBus ${QT_PREFIX_HINT} ${YUZU_QT_NO_CMAKE_SYSTEM_PATH}) find_package(Qt5 ${QT_VERSION} REQUIRED COMPONENTS Widgets Concurrent Multimedia DBus ${QT_PREFIX_HINT} ${YUZU_QT_NO_CMAKE_SYSTEM_PATH})
else() else()
find_package(Qt5 ${QT_VERSION} REQUIRED COMPONENTS Widgets Concurrent Multimedia ${QT_PREFIX_HINT} ${YUZU_QT_NO_CMAKE_SYSTEM_PATH}) find_package(Qt5 ${QT_VERSION} REQUIRED COMPONENTS Widgets Concurrent Multimedia ${QT_PREFIX_HINT} ${YUZU_QT_NO_CMAKE_SYSTEM_PATH})

View file

@ -315,7 +315,7 @@ target_include_directories(yuzu PRIVATE ../../externals/Vulkan-Headers/include)
if (NOT WIN32) if (NOT WIN32)
target_include_directories(yuzu PRIVATE ${Qt5Gui_PRIVATE_INCLUDE_DIRS}) target_include_directories(yuzu PRIVATE ${Qt5Gui_PRIVATE_INCLUDE_DIRS})
endif() endif()
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") if (UNIX AND NOT APPLE)
target_link_libraries(yuzu PRIVATE Qt::DBus) target_link_libraries(yuzu PRIVATE Qt::DBus)
endif() endif()

View file

@ -9,7 +9,7 @@
#ifdef __APPLE__ #ifdef __APPLE__
#include <unistd.h> // for chdir #include <unistd.h> // for chdir
#endif #endif
#ifdef __linux__ #ifdef __unix__
#include <csignal> #include <csignal>
#include <sys/socket.h> #include <sys/socket.h>
#endif #endif
@ -275,7 +275,7 @@ static void OverrideWindowsFont() {
#endif #endif
bool GMainWindow::CheckDarkMode() { bool GMainWindow::CheckDarkMode() {
#ifdef __linux__ #ifdef __unix__
const QPalette test_palette(qApp->palette()); const QPalette test_palette(qApp->palette());
const QColor text_color = test_palette.color(QPalette::Active, QPalette::Text); const QColor text_color = test_palette.color(QPalette::Active, QPalette::Text);
const QColor window_color = test_palette.color(QPalette::Active, QPalette::Window); const QColor window_color = test_palette.color(QPalette::Active, QPalette::Window);
@ -283,7 +283,7 @@ bool GMainWindow::CheckDarkMode() {
#else #else
// TODO: Windows // TODO: Windows
return false; return false;
#endif // __linux__ #endif // __unix__
} }
GMainWindow::GMainWindow(std::unique_ptr<Config> config_, bool has_broken_vulkan) GMainWindow::GMainWindow(std::unique_ptr<Config> config_, bool has_broken_vulkan)
@ -291,7 +291,7 @@ GMainWindow::GMainWindow(std::unique_ptr<Config> config_, bool has_broken_vulkan
input_subsystem{std::make_shared<InputCommon::InputSubsystem>()}, config{std::move(config_)}, input_subsystem{std::make_shared<InputCommon::InputSubsystem>()}, config{std::move(config_)},
vfs{std::make_shared<FileSys::RealVfsFilesystem>()}, vfs{std::make_shared<FileSys::RealVfsFilesystem>()},
provider{std::make_unique<FileSys::ManualContentProvider>()} { provider{std::make_unique<FileSys::ManualContentProvider>()} {
#ifdef __linux__ #ifdef __unix__
SetupSigInterrupts(); SetupSigInterrupts();
#endif #endif
system->Initialize(); system->Initialize();
@ -509,7 +509,7 @@ GMainWindow::~GMainWindow() {
delete render_window; delete render_window;
} }
#ifdef __linux__ #ifdef __unix__
::close(sig_interrupt_fds[0]); ::close(sig_interrupt_fds[0]);
::close(sig_interrupt_fds[1]); ::close(sig_interrupt_fds[1]);
#endif #endif
@ -1379,7 +1379,7 @@ void GMainWindow::OnDisplayTitleBars(bool show) {
} }
void GMainWindow::SetupPrepareForSleep() { void GMainWindow::SetupPrepareForSleep() {
#ifdef __linux__ #ifdef __unix__
auto bus = QDBusConnection::systemBus(); auto bus = QDBusConnection::systemBus();
if (bus.isConnected()) { if (bus.isConnected()) {
const bool success = bus.connect( const bool success = bus.connect(
@ -1393,7 +1393,7 @@ void GMainWindow::SetupPrepareForSleep() {
} else { } else {
LOG_WARNING(Frontend, "QDBusConnection system bus is not connected"); LOG_WARNING(Frontend, "QDBusConnection system bus is not connected");
} }
#endif // __linux__ #endif // __unix__
} }
void GMainWindow::OnPrepareForSleep(bool prepare_sleep) { void GMainWindow::OnPrepareForSleep(bool prepare_sleep) {
@ -1415,7 +1415,7 @@ void GMainWindow::OnPrepareForSleep(bool prepare_sleep) {
} }
} }
#ifdef __linux__ #ifdef __unix__
static std::optional<QDBusObjectPath> HoldWakeLockLinux(u32 window_id = 0) { static std::optional<QDBusObjectPath> HoldWakeLockLinux(u32 window_id = 0) {
if (!QDBusConnection::sessionBus().isConnected()) { if (!QDBusConnection::sessionBus().isConnected()) {
return {}; return {};
@ -1500,14 +1500,14 @@ void GMainWindow::OnSigInterruptNotifierActivated() {
emit SigInterrupt(); emit SigInterrupt();
} }
#endif // __linux__ #endif // __unix__
void GMainWindow::PreventOSSleep() { void GMainWindow::PreventOSSleep() {
#ifdef _WIN32 #ifdef _WIN32
SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED); SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED);
#elif defined(HAVE_SDL2) #elif defined(HAVE_SDL2)
SDL_DisableScreenSaver(); SDL_DisableScreenSaver();
#ifdef __linux__ #ifdef __unix__
auto reply = HoldWakeLockLinux(winId()); auto reply = HoldWakeLockLinux(winId());
if (reply) { if (reply) {
wake_lock = std::move(reply.value()); wake_lock = std::move(reply.value());
@ -1521,7 +1521,7 @@ void GMainWindow::AllowOSSleep() {
SetThreadExecutionState(ES_CONTINUOUS); SetThreadExecutionState(ES_CONTINUOUS);
#elif defined(HAVE_SDL2) #elif defined(HAVE_SDL2)
SDL_EnableScreenSaver(); SDL_EnableScreenSaver();
#ifdef __linux__ #ifdef __unix__
if (!wake_lock.path().isEmpty()) { if (!wake_lock.path().isEmpty()) {
ReleaseWakeLockLinux(wake_lock); ReleaseWakeLockLinux(wake_lock);
} }
@ -4070,7 +4070,7 @@ void GMainWindow::SetDiscordEnabled([[maybe_unused]] bool state) {
} }
void GMainWindow::changeEvent(QEvent* event) { void GMainWindow::changeEvent(QEvent* event) {
#ifdef __linux__ #ifdef __unix__
// PaletteChange event appears to only reach so far into the GUI, explicitly asking to // PaletteChange event appears to only reach so far into the GUI, explicitly asking to
// UpdateUITheme is a decent work around // UpdateUITheme is a decent work around
if (event->type() == QEvent::PaletteChange) { if (event->type() == QEvent::PaletteChange) {
@ -4085,7 +4085,7 @@ void GMainWindow::changeEvent(QEvent* event) {
} }
last_window_color = window_color; last_window_color = window_color;
} }
#endif // __linux__ #endif // __unix__
QWidget::changeEvent(event); QWidget::changeEvent(event);
} }

View file

@ -15,7 +15,7 @@
#include "yuzu/compatibility_list.h" #include "yuzu/compatibility_list.h"
#include "yuzu/hotkeys.h" #include "yuzu/hotkeys.h"
#ifdef __linux__ #ifdef __unix__
#include <QVariant> #include <QVariant>
#include <QtDBus/QDBusInterface> #include <QtDBus/QDBusInterface>
#include <QtDBus/QtDBus> #include <QtDBus/QtDBus>
@ -255,7 +255,7 @@ private:
void changeEvent(QEvent* event) override; void changeEvent(QEvent* event) override;
void closeEvent(QCloseEvent* event) override; void closeEvent(QCloseEvent* event) override;
#ifdef __linux__ #ifdef __unix__
void SetupSigInterrupts(); void SetupSigInterrupts();
static void HandleSigInterrupt(int); static void HandleSigInterrupt(int);
void OnSigInterruptNotifierActivated(); void OnSigInterruptNotifierActivated();
@ -435,7 +435,7 @@ private:
// True if TAS recording dialog is visible // True if TAS recording dialog is visible
bool is_tas_recording_dialog_active{}; bool is_tas_recording_dialog_active{};
#ifdef __linux__ #ifdef __unix__
QSocketNotifier* sig_interrupt_notifier; QSocketNotifier* sig_interrupt_notifier;
static std::array<int, 3> sig_interrupt_fds; static std::array<int, 3> sig_interrupt_fds;