mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-22 02:32:36 +01:00
Don't use std::exit during Qt initialization
This commit is contained in:
parent
7ce835e878
commit
2865865382
@ -13,7 +13,7 @@ headless_application::headless_application(int& argc, char** argv) : QCoreApplic
|
||||
{
|
||||
}
|
||||
|
||||
void headless_application::Init()
|
||||
bool headless_application::Init()
|
||||
{
|
||||
// Force init the emulator
|
||||
InitializeEmulator("00000001", true, false); // TODO: get user from cli args if possible
|
||||
@ -26,6 +26,8 @@ void headless_application::Init()
|
||||
|
||||
// As per QT recommendations to avoid conflicts for POSIX functions
|
||||
std::setlocale(LC_NUMERIC, "C");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void headless_application::InitializeConnects()
|
||||
|
@ -17,7 +17,7 @@ public:
|
||||
headless_application(int& argc, char** argv);
|
||||
|
||||
/** Call this method before calling app.exec */
|
||||
void Init() override;
|
||||
bool Init() override;
|
||||
|
||||
private:
|
||||
void InitializeCallbacks();
|
||||
|
@ -507,17 +507,28 @@ int main(int argc, char** argv)
|
||||
|
||||
gui_app->SetShowGui(!s_no_gui);
|
||||
gui_app->SetUseCliStyle(use_cli_style);
|
||||
gui_app->Init();
|
||||
|
||||
if (!gui_app->Init())
|
||||
{
|
||||
Emu.Quit(true);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if (auto headless_app = qobject_cast<headless_application*>(app.data()))
|
||||
{
|
||||
s_headless = true;
|
||||
headless_app->Init();
|
||||
|
||||
if (!headless_app->Init())
|
||||
{
|
||||
Emu.Quit(true);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Should be unreachable
|
||||
report_fatal_error("RPCS3 initialization failed!");
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
|
@ -8,7 +8,7 @@ struct EmuCallbacks;
|
||||
class main_application
|
||||
{
|
||||
public:
|
||||
virtual void Init() = 0;
|
||||
virtual bool Init() = 0;
|
||||
|
||||
static bool InitializeEmulator(const std::string& user, bool force_init, bool show_gui);
|
||||
|
||||
|
@ -63,13 +63,27 @@ namespace
|
||||
|
||||
emu_settings::emu_settings()
|
||||
: QObject()
|
||||
, m_render_creator(new render_creator(this))
|
||||
{
|
||||
}
|
||||
|
||||
emu_settings::~emu_settings()
|
||||
{
|
||||
}
|
||||
|
||||
bool emu_settings::Init()
|
||||
{
|
||||
m_render_creator = new render_creator(this);
|
||||
|
||||
if (!m_render_creator)
|
||||
{
|
||||
fmt::throw_exception("emu_settings::emu_settings() render_creator is null");
|
||||
}
|
||||
|
||||
if (m_render_creator->abort_requested)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Make Vulkan default setting if it is supported
|
||||
if (m_render_creator->Vulkan.supported && !m_render_creator->Vulkan.adapters.empty())
|
||||
{
|
||||
@ -78,10 +92,8 @@ emu_settings::emu_settings()
|
||||
Emu.SetDefaultRenderer(video_renderer::vulkan);
|
||||
Emu.SetDefaultGraphicsAdapter(adapter);
|
||||
}
|
||||
}
|
||||
|
||||
emu_settings::~emu_settings()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void emu_settings::LoadSettings(const std::string& title_id)
|
||||
|
@ -35,6 +35,8 @@ public:
|
||||
emu_settings();
|
||||
~emu_settings();
|
||||
|
||||
bool Init();
|
||||
|
||||
/** Connects a combo box with the target settings type*/
|
||||
void EnhanceComboBox(QComboBox* combobox, emu_settings_type type, bool is_ranged = false, bool use_max = false, int max = 0, bool sorted = false);
|
||||
|
||||
@ -75,7 +77,7 @@ public:
|
||||
void SetSetting(emu_settings_type type, const std::string& val);
|
||||
|
||||
/** Gets all the renderer info for gpu settings.*/
|
||||
render_creator* m_render_creator;
|
||||
render_creator* m_render_creator = nullptr;
|
||||
|
||||
/** Gets a list of all the microphones available.*/
|
||||
microphone_creator m_microphone_creator;
|
||||
|
@ -50,7 +50,7 @@ gui_application::~gui_application()
|
||||
#endif
|
||||
}
|
||||
|
||||
void gui_application::Init()
|
||||
bool gui_application::Init()
|
||||
{
|
||||
setWindowIcon(QIcon(":/rpcs3.ico"));
|
||||
|
||||
@ -58,6 +58,11 @@ void gui_application::Init()
|
||||
m_gui_settings.reset(new gui_settings());
|
||||
m_persistent_settings.reset(new persistent_settings());
|
||||
|
||||
if (!m_emu_settings->Init())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get deprecated active user (before August 2nd 2020)
|
||||
QString active_user = m_gui_settings->GetValue(gui::um_active_user).toString();
|
||||
|
||||
@ -91,9 +96,9 @@ void gui_application::Init()
|
||||
welcome->exec();
|
||||
}
|
||||
|
||||
if (m_main_window)
|
||||
if (m_main_window && !m_main_window->Init())
|
||||
{
|
||||
m_main_window->Init();
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef WITH_DISCORD_RPC
|
||||
@ -103,6 +108,8 @@ void gui_application::Init()
|
||||
discord::initialize();
|
||||
}
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void gui_application::SwitchTranslator(QTranslator& translator, const QString& filename, const QString& language_code)
|
||||
|
@ -39,7 +39,7 @@ public:
|
||||
}
|
||||
|
||||
/** Call this method before calling app.exec */
|
||||
void Init() override;
|
||||
bool Init() override;
|
||||
|
||||
std::unique_ptr<gs_frame> get_gs_frame();
|
||||
|
||||
|
@ -82,7 +82,7 @@ main_window::~main_window()
|
||||
/* An init method is used so that RPCS3App can create the necessary connects before calling init (specifically the stylesheet connect).
|
||||
* Simplifies logic a bit.
|
||||
*/
|
||||
void main_window::Init()
|
||||
bool main_window::Init()
|
||||
{
|
||||
setAcceptDrops(true);
|
||||
|
||||
@ -127,7 +127,7 @@ void main_window::Init()
|
||||
|
||||
if (msg.exec() == QMessageBox::No)
|
||||
{
|
||||
std::exit(EXIT_SUCCESS);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -227,6 +227,8 @@ void main_window::Init()
|
||||
m_updater.check_for_updates(true, update_value != "true", this);
|
||||
}
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
QString main_window::GetCurrentTitle()
|
||||
|
@ -81,7 +81,7 @@ class main_window : public QMainWindow
|
||||
|
||||
public:
|
||||
explicit main_window(std::shared_ptr<gui_settings> gui_settings, std::shared_ptr<emu_settings> emu_settings, std::shared_ptr<persistent_settings> persistent_settings, QWidget *parent = 0);
|
||||
void Init();
|
||||
bool Init();
|
||||
~main_window();
|
||||
QIcon GetAppIcon();
|
||||
|
||||
|
@ -77,7 +77,10 @@ render_creator::render_creator(QObject *parent) : QObject(parent)
|
||||
|
||||
enum_thread.detach();
|
||||
if (button != QMessageBox::Ignore)
|
||||
std::exit(1);
|
||||
{
|
||||
abort_requested = true;
|
||||
return;
|
||||
}
|
||||
|
||||
supports_vulkan = false;
|
||||
}
|
||||
|
@ -11,6 +11,10 @@ class render_creator : public QObject
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
render_creator(QObject* parent);
|
||||
|
||||
void update_names(const QStringList& names);
|
||||
|
||||
struct render_info
|
||||
{
|
||||
QString name;
|
||||
@ -31,14 +35,11 @@ public:
|
||||
, has_msaa(has_msaa) {}
|
||||
};
|
||||
|
||||
bool abort_requested = false;
|
||||
bool supports_vulkan = false;
|
||||
QStringList vulkan_adapters;
|
||||
render_info Vulkan;
|
||||
render_info OpenGL;
|
||||
render_info NullRender;
|
||||
std::vector<render_info*> renderers;
|
||||
|
||||
render_creator(QObject *parent);
|
||||
|
||||
void update_names(const QStringList& names);
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user