mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	yuzu/main: Amend lifetime issues with InputSubsystem
Due to the way Qt performs destruction of parent/child widgets, we need to make the lifetime of the input subsystem shared across the main window and the render window.
This commit is contained in:
		
							parent
							
								
									57d9ef5a89
								
							
						
					
					
						commit
						bcd3c79eca
					
				@ -305,8 +305,8 @@ static Core::Frontend::EmuWindow::WindowSystemInfo GetWindowSystemInfo(QWindow*
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GRenderWindow::GRenderWindow(GMainWindow* parent, EmuThread* emu_thread_,
 | 
					GRenderWindow::GRenderWindow(GMainWindow* parent, EmuThread* emu_thread_,
 | 
				
			||||||
                             InputCommon::InputSubsystem* input_subsystem_)
 | 
					                             std::shared_ptr<InputCommon::InputSubsystem> input_subsystem_)
 | 
				
			||||||
    : QWidget(parent), emu_thread(emu_thread_), input_subsystem{input_subsystem_} {
 | 
					    : QWidget(parent), emu_thread(emu_thread_), input_subsystem{std::move(input_subsystem_)} {
 | 
				
			||||||
    setWindowTitle(QStringLiteral("yuzu %1 | %2-%3")
 | 
					    setWindowTitle(QStringLiteral("yuzu %1 | %2-%3")
 | 
				
			||||||
                       .arg(QString::fromUtf8(Common::g_build_name),
 | 
					                       .arg(QString::fromUtf8(Common::g_build_name),
 | 
				
			||||||
                            QString::fromUtf8(Common::g_scm_branch),
 | 
					                            QString::fromUtf8(Common::g_scm_branch),
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <atomic>
 | 
					#include <atomic>
 | 
				
			||||||
#include <condition_variable>
 | 
					#include <condition_variable>
 | 
				
			||||||
 | 
					#include <memory>
 | 
				
			||||||
#include <mutex>
 | 
					#include <mutex>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <QImage>
 | 
					#include <QImage>
 | 
				
			||||||
@ -126,7 +127,7 @@ class GRenderWindow : public QWidget, public Core::Frontend::EmuWindow {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    explicit GRenderWindow(GMainWindow* parent, EmuThread* emu_thread_,
 | 
					    explicit GRenderWindow(GMainWindow* parent, EmuThread* emu_thread_,
 | 
				
			||||||
                           InputCommon::InputSubsystem* input_subsystem_);
 | 
					                           std::shared_ptr<InputCommon::InputSubsystem> input_subsystem_);
 | 
				
			||||||
    ~GRenderWindow() override;
 | 
					    ~GRenderWindow() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // EmuWindow implementation.
 | 
					    // EmuWindow implementation.
 | 
				
			||||||
@ -188,7 +189,7 @@ private:
 | 
				
			|||||||
    QStringList GetUnsupportedGLExtensions() const;
 | 
					    QStringList GetUnsupportedGLExtensions() const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    EmuThread* emu_thread;
 | 
					    EmuThread* emu_thread;
 | 
				
			||||||
    InputCommon::InputSubsystem* input_subsystem;
 | 
					    std::shared_ptr<InputCommon::InputSubsystem> input_subsystem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Main context that will be shared with all other contexts that are requested.
 | 
					    // Main context that will be shared with all other contexts that are requested.
 | 
				
			||||||
    // If this is used in a shared context setting, then this should not be used directly, but
 | 
					    // If this is used in a shared context setting, then this should not be used directly, but
 | 
				
			||||||
 | 
				
			|||||||
@ -187,7 +187,7 @@ static void InitializeLogging() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GMainWindow::GMainWindow()
 | 
					GMainWindow::GMainWindow()
 | 
				
			||||||
    : input_subsystem{std::make_unique<InputCommon::InputSubsystem>()},
 | 
					    : input_subsystem{std::make_shared<InputCommon::InputSubsystem>()},
 | 
				
			||||||
      config{std::make_unique<Config>()}, vfs{std::make_shared<FileSys::RealVfsFilesystem>()},
 | 
					      config{std::make_unique<Config>()}, vfs{std::make_shared<FileSys::RealVfsFilesystem>()},
 | 
				
			||||||
      provider{std::make_unique<FileSys::ManualContentProvider>()} {
 | 
					      provider{std::make_unique<FileSys::ManualContentProvider>()} {
 | 
				
			||||||
    InitializeLogging();
 | 
					    InitializeLogging();
 | 
				
			||||||
@ -474,7 +474,7 @@ void GMainWindow::InitializeWidgets() {
 | 
				
			|||||||
#ifdef YUZU_ENABLE_COMPATIBILITY_REPORTING
 | 
					#ifdef YUZU_ENABLE_COMPATIBILITY_REPORTING
 | 
				
			||||||
    ui.action_Report_Compatibility->setVisible(true);
 | 
					    ui.action_Report_Compatibility->setVisible(true);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    render_window = new GRenderWindow(this, emu_thread.get(), input_subsystem.get());
 | 
					    render_window = new GRenderWindow(this, emu_thread.get(), input_subsystem);
 | 
				
			||||||
    render_window->hide();
 | 
					    render_window->hide();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    game_list = new GameList(vfs, provider.get(), this);
 | 
					    game_list = new GameList(vfs, provider.get(), this);
 | 
				
			||||||
 | 
				
			|||||||
@ -258,7 +258,7 @@ private:
 | 
				
			|||||||
    Ui::MainWindow ui;
 | 
					    Ui::MainWindow ui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    std::unique_ptr<DiscordRPC::DiscordInterface> discord_rpc;
 | 
					    std::unique_ptr<DiscordRPC::DiscordInterface> discord_rpc;
 | 
				
			||||||
    std::unique_ptr<InputCommon::InputSubsystem> input_subsystem;
 | 
					    std::shared_ptr<InputCommon::InputSubsystem> input_subsystem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    GRenderWindow* render_window;
 | 
					    GRenderWindow* render_window;
 | 
				
			||||||
    GameList* game_list;
 | 
					    GameList* game_list;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user