Merge pull request #9181 from jbeich/freebsd-qt-parity
Qt: enable recent Linux features on BSDs
This commit is contained in:
		| @@ -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}) | ||||||
|   | |||||||
| @@ -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() | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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; | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user