diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 7cb2c444aa..41f8ad4fe4 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -90,7 +90,6 @@ extern std::pair, CellError> ppu_load_overlay(const ppu_ extern bool ppu_load_rel_exec(const ppu_rel_object&); extern void send_close_home_menu_cmds(); -extern void check_microphone_permissions(); extern void signal_system_cache_can_stay(); @@ -1810,7 +1809,7 @@ game_boot_result Emulator::Load(const std::string& title_id, bool is_disc_patch, { if (const std::vector device_list = fmt::split(g_cfg.audio.microphone_devices.to_string(), {"@@@"}); !device_list.empty()) { - check_microphone_permissions(); + Emu.GetCallbacks().check_microphone_permissions(); } } diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index 83a889af94..6783215278 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -107,6 +107,7 @@ struct EmuCallbacks std::function()> get_font_dirs; std::function&)> on_install_pkgs; std::function add_breakpoint; + std::function check_microphone_permissions; }; namespace utils diff --git a/rpcs3/headless_application.cpp b/rpcs3/headless_application.cpp index 098b84532f..9d1e380061 100644 --- a/rpcs3/headless_application.cpp +++ b/rpcs3/headless_application.cpp @@ -168,6 +168,8 @@ void headless_application::InitializeCallbacks() callbacks.play_sound = [](const std::string&){}; callbacks.add_breakpoint = [](u32 /*addr*/){}; + callbacks.check_microphone_permissions = [](){}; + Emu.SetCallbacks(std::move(callbacks)); } diff --git a/rpcs3/rpcs3qt/gui_application.cpp b/rpcs3/rpcs3qt/gui_application.cpp index b0a5d53812..5a95b6d8c1 100644 --- a/rpcs3/rpcs3qt/gui_application.cpp +++ b/rpcs3/rpcs3qt/gui_application.cpp @@ -60,6 +60,10 @@ #include "Emu/Cell/lv2/sys_usbd.h" #endif +#if QT_CONFIG(permissions) +#include +#endif + LOG_CHANNEL(gui_log, "GUI"); std::unique_ptr g_raw_mouse_handler; @@ -878,6 +882,32 @@ void gui_application::InitializeCallbacks() }); }; + callbacks.check_microphone_permissions = []() + { +#if QT_CONFIG(permissions) + Emu.BlockingCallFromMainThread([]() + { + const QMicrophonePermission permission; + switch (qApp->checkPermission(permission)) + { + case Qt::PermissionStatus::Undetermined: + gui_log.notice("Requesting microphone permission"); + qApp->requestPermission(permission, []() + { + Emu.GetCallbacks().check_microphone_permissions(); + }); + break; + case Qt::PermissionStatus::Denied: + gui_log.error("RPCS3 has no permissions to access microphones on this device."); + break; + case Qt::PermissionStatus::Granted: + gui_log.notice("Microphone permission granted"); + break; + } + }); +#endif + }; + Emu.SetCallbacks(std::move(callbacks)); } diff --git a/rpcs3/rpcs3qt/main_window.cpp b/rpcs3/rpcs3qt/main_window.cpp index 734bdf04e4..a0f94331fd 100644 --- a/rpcs3/rpcs3qt/main_window.cpp +++ b/rpcs3/rpcs3qt/main_window.cpp @@ -86,11 +86,6 @@ #include #include -#if QT_CONFIG(permissions) -#include -#include -#endif - #ifdef _WIN32 #include "raw_mouse_settings_dialog.h" #endif @@ -168,32 +163,6 @@ extern void qt_events_aware_op(int repeat_duration_ms, std::function wra } } -extern void check_microphone_permissions() -{ -#if QT_CONFIG(permissions) - Emu.BlockingCallFromMainThread([]() - { - const QMicrophonePermission permission; - switch (qApp->checkPermission(permission)) - { - case Qt::PermissionStatus::Undetermined: - gui_log.notice("Requesting microphone permission"); - qApp->requestPermission(permission, []() - { - check_microphone_permissions(); - }); - break; - case Qt::PermissionStatus::Denied: - gui_log.error("RPCS3 has no permissions to access microphones on this device."); - break; - case Qt::PermissionStatus::Granted: - gui_log.notice("Microphone permission granted"); - break; - } - }); -#endif -} - main_window::main_window(std::shared_ptr gui_settings, std::shared_ptr emu_settings, std::shared_ptr persistent_settings, QWidget *parent) : QMainWindow(parent) , ui(new Ui::main_window)