mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	applet: Add operation completed callback
This commit is contained in:
		
							parent
							
								
									6209fe0c27
								
							
						
					
					
						commit
						19b2571aec
					
				@ -18,10 +18,12 @@ void DefaultSoftwareKeyboardApplet::RequestText(
 | 
				
			|||||||
    out(parameters.initial_text);
 | 
					    out(parameters.initial_text);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void DefaultSoftwareKeyboardApplet::SendTextCheckDialog(std::u16string error_message) const {
 | 
					void DefaultSoftwareKeyboardApplet::SendTextCheckDialog(
 | 
				
			||||||
 | 
					    std::u16string error_message, std::function<void()> finished_check) const {
 | 
				
			||||||
    LOG_WARNING(Service_AM,
 | 
					    LOG_WARNING(Service_AM,
 | 
				
			||||||
                "(STUBBED) called - Default fallback software keyboard does not support text "
 | 
					                "(STUBBED) called - Default fallback software keyboard does not support text "
 | 
				
			||||||
                "check! (error_message={})",
 | 
					                "check! (error_message={})",
 | 
				
			||||||
                Common::UTF16ToUTF8(error_message));
 | 
					                Common::UTF16ToUTF8(error_message));
 | 
				
			||||||
 | 
					    finished_check();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
} // namespace Core::Frontend
 | 
					} // namespace Core::Frontend
 | 
				
			||||||
 | 
				
			|||||||
@ -39,14 +39,16 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    virtual void RequestText(std::function<void(std::optional<std::u16string>)> out,
 | 
					    virtual void RequestText(std::function<void(std::optional<std::u16string>)> out,
 | 
				
			||||||
                             SoftwareKeyboardParameters parameters) const = 0;
 | 
					                             SoftwareKeyboardParameters parameters) const = 0;
 | 
				
			||||||
    virtual void SendTextCheckDialog(std::u16string error_message) const = 0;
 | 
					    virtual void SendTextCheckDialog(std::u16string error_message,
 | 
				
			||||||
 | 
					                                     std::function<void()> finished_check) const = 0;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DefaultSoftwareKeyboardApplet final : public SoftwareKeyboardApplet {
 | 
					class DefaultSoftwareKeyboardApplet final : public SoftwareKeyboardApplet {
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    void RequestText(std::function<void(std::optional<std::u16string>)> out,
 | 
					    void RequestText(std::function<void(std::optional<std::u16string>)> out,
 | 
				
			||||||
                     SoftwareKeyboardParameters parameters) const override;
 | 
					                     SoftwareKeyboardParameters parameters) const override;
 | 
				
			||||||
    void SendTextCheckDialog(std::u16string error_message) const override;
 | 
					    void SendTextCheckDialog(std::u16string error_message,
 | 
				
			||||||
 | 
					                             std::function<void()> finished_check) const override;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // namespace Core::Frontend
 | 
					} // namespace Core::Frontend
 | 
				
			||||||
 | 
				
			|||||||
@ -605,8 +605,10 @@ private:
 | 
				
			|||||||
        ASSERT(applet != nullptr);
 | 
					        ASSERT(applet != nullptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        applet->Initialize(storage_stack);
 | 
					        applet->Initialize(storage_stack);
 | 
				
			||||||
        storage_stack.clear();
 | 
					        while (!storage_stack.empty())
 | 
				
			||||||
        interactive_storage_stack.clear();
 | 
					            storage_stack.pop();
 | 
				
			||||||
 | 
					        while (!interactive_storage_stack.empty())
 | 
				
			||||||
 | 
					            interactive_storage_stack.pop();
 | 
				
			||||||
        applet->Execute([this](IStorage storage) { AppletStorageProxyOutData(storage); },
 | 
					        applet->Execute([this](IStorage storage) { AppletStorageProxyOutData(storage); },
 | 
				
			||||||
                        [this](IStorage storage) { AppletStorageProxyOutInteractiveData(storage); },
 | 
					                        [this](IStorage storage) { AppletStorageProxyOutInteractiveData(storage); },
 | 
				
			||||||
                        [this] { state_changed_event->Signal(); });
 | 
					                        [this] { state_changed_event->Signal(); });
 | 
				
			||||||
 | 
				
			|||||||
@ -87,7 +87,7 @@ void SoftwareKeyboard::ReceiveInteractiveData(std::shared_ptr<IStorage> storage)
 | 
				
			|||||||
        std::array<char16_t, SWKBD_OUTPUT_INTERACTIVE_BUFFER_SIZE / 2 - 2> string;
 | 
					        std::array<char16_t, SWKBD_OUTPUT_INTERACTIVE_BUFFER_SIZE / 2 - 2> string;
 | 
				
			||||||
        std::memcpy(string.data(), data.data() + 4, string.size() * 2);
 | 
					        std::memcpy(string.data(), data.data() + 4, string.size() * 2);
 | 
				
			||||||
        frontend.SendTextCheckDialog(
 | 
					        frontend.SendTextCheckDialog(
 | 
				
			||||||
            Common::UTF16StringFromFixedZeroTerminatedBuffer(string.data(), string.size()));
 | 
					            Common::UTF16StringFromFixedZeroTerminatedBuffer(string.data(), string.size()), state);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -3,11 +3,13 @@
 | 
				
			|||||||
// Refer to the license.txt file included.
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <algorithm>
 | 
					#include <algorithm>
 | 
				
			||||||
 | 
					#include <mutex>
 | 
				
			||||||
#include <QDialogButtonBox>
 | 
					#include <QDialogButtonBox>
 | 
				
			||||||
#include <QFont>
 | 
					#include <QFont>
 | 
				
			||||||
#include <QLabel>
 | 
					#include <QLabel>
 | 
				
			||||||
#include <QLineEdit>
 | 
					#include <QLineEdit>
 | 
				
			||||||
#include <QVBoxLayout>
 | 
					#include <QVBoxLayout>
 | 
				
			||||||
 | 
					#include "core/hle/lock.h"
 | 
				
			||||||
#include "yuzu/applets/software_keyboard.h"
 | 
					#include "yuzu/applets/software_keyboard.h"
 | 
				
			||||||
#include "yuzu/main.h"
 | 
					#include "yuzu/main.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -122,10 +124,20 @@ void QtSoftwareKeyboard::RequestText(std::function<void(std::optional<std::u16st
 | 
				
			|||||||
    emit MainWindowGetText(parameters);
 | 
					    emit MainWindowGetText(parameters);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void QtSoftwareKeyboard::SendTextCheckDialog(std::u16string error_message) const {
 | 
					void QtSoftwareKeyboard::SendTextCheckDialog(std::u16string error_message,
 | 
				
			||||||
 | 
					                                             std::function<void()> finished_check) const {
 | 
				
			||||||
 | 
					    this->finished_check = finished_check;
 | 
				
			||||||
    emit MainWindowTextCheckDialog(error_message);
 | 
					    emit MainWindowTextCheckDialog(error_message);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void QtSoftwareKeyboard::MainWindowFinishedText(std::optional<std::u16string> text) {
 | 
					void QtSoftwareKeyboard::MainWindowFinishedText(std::optional<std::u16string> text) {
 | 
				
			||||||
 | 
					    // Acquire the HLE mutex
 | 
				
			||||||
 | 
					    std::lock_guard<std::recursive_mutex> lock(HLE::g_hle_lock);
 | 
				
			||||||
    text_output(text);
 | 
					    text_output(text);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void QtSoftwareKeyboard::MainWindowFinishedCheckDialog() {
 | 
				
			||||||
 | 
					    // Acquire the HLE mutex
 | 
				
			||||||
 | 
					    std::lock_guard<std::recursive_mutex> lock(HLE::g_hle_lock);
 | 
				
			||||||
 | 
					    finished_check();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -62,7 +62,8 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    void RequestText(std::function<void(std::optional<std::u16string>)> out,
 | 
					    void RequestText(std::function<void(std::optional<std::u16string>)> out,
 | 
				
			||||||
                     Core::Frontend::SoftwareKeyboardParameters parameters) const override;
 | 
					                     Core::Frontend::SoftwareKeyboardParameters parameters) const override;
 | 
				
			||||||
    void SendTextCheckDialog(std::u16string error_message) const override;
 | 
					    void SendTextCheckDialog(std::u16string error_message,
 | 
				
			||||||
 | 
					                             std::function<void()> finished_check) const override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
signals:
 | 
					signals:
 | 
				
			||||||
    void MainWindowGetText(Core::Frontend::SoftwareKeyboardParameters parameters) const;
 | 
					    void MainWindowGetText(Core::Frontend::SoftwareKeyboardParameters parameters) const;
 | 
				
			||||||
@ -70,7 +71,9 @@ signals:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public slots:
 | 
					public slots:
 | 
				
			||||||
    void MainWindowFinishedText(std::optional<std::u16string> text);
 | 
					    void MainWindowFinishedText(std::optional<std::u16string> text);
 | 
				
			||||||
 | 
					    void MainWindowFinishedCheckDialog();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    mutable std::function<void(std::optional<std::u16string>)> text_output;
 | 
					    mutable std::function<void(std::optional<std::u16string>)> text_output;
 | 
				
			||||||
 | 
					    mutable std::function<void()> finished_check;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -215,14 +215,17 @@ void GMainWindow::SoftwareKeyboardGetText(
 | 
				
			|||||||
    dialog.setWindowModality(Qt::WindowModal);
 | 
					    dialog.setWindowModality(Qt::WindowModal);
 | 
				
			||||||
    dialog.exec();
 | 
					    dialog.exec();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!dialog.GetStatus())
 | 
					    if (!dialog.GetStatus()) {
 | 
				
			||||||
        emit SoftwareKeyboardFinishedText(std::nullopt);
 | 
					        emit SoftwareKeyboardFinishedText(std::nullopt);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    emit SoftwareKeyboardFinishedText(dialog.GetText());
 | 
					    emit SoftwareKeyboardFinishedText(dialog.GetText());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void GMainWindow::SoftwareKeyboardInvokeCheckDialog(std::u16string error_message) {
 | 
					void GMainWindow::SoftwareKeyboardInvokeCheckDialog(std::u16string error_message) {
 | 
				
			||||||
    QMessageBox::warning(this, tr("Text Check Failed"), QString::fromStdU16String(error_message));
 | 
					    QMessageBox::warning(this, tr("Text Check Failed"), QString::fromStdU16String(error_message));
 | 
				
			||||||
 | 
					    emit SoftwareKeyboardFinishedCheckDialog();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void GMainWindow::InitializeWidgets() {
 | 
					void GMainWindow::InitializeWidgets() {
 | 
				
			||||||
 | 
				
			|||||||
@ -100,6 +100,7 @@ signals:
 | 
				
			|||||||
    void UpdateThemedIcons();
 | 
					    void UpdateThemedIcons();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void SoftwareKeyboardFinishedText(std::optional<std::u16string> text);
 | 
					    void SoftwareKeyboardFinishedText(std::optional<std::u16string> text);
 | 
				
			||||||
 | 
					    void SoftwareKeyboardFinishedCheckDialog();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public slots:
 | 
					public slots:
 | 
				
			||||||
    void SoftwareKeyboardGetText(const Core::Frontend::SoftwareKeyboardParameters& parameters);
 | 
					    void SoftwareKeyboardGetText(const Core::Frontend::SoftwareKeyboardParameters& parameters);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user