From 06c3e339ada22c79c08546a74b4e33c2c5671b72 Mon Sep 17 00:00:00 2001 From: "Herman S." <429230+has207@users.noreply.github.com> Date: Sat, 25 Oct 2025 14:58:01 +0900 Subject: [PATCH] [UI] Move AchievementDialogQt from app to ui where it belongs --- src/xenia/app/game_list_dialog_qt.cc | 4 +-- src/xenia/cpu/ppc/testing/premake5.lua | 11 ++++++ src/xenia/kernel/xam/xam_ui.cc | 6 ++-- .../{app => ui}/achievements_dialog_qt.cc | 7 ++-- .../{app => ui}/achievements_dialog_qt.h | 10 +++--- .../{app => ui}/moc_achievements_dialog_qt.cc | 34 +++++++++---------- 6 files changed, 41 insertions(+), 31 deletions(-) rename src/xenia/{app => ui}/achievements_dialog_qt.cc (99%) rename src/xenia/{app => ui}/achievements_dialog_qt.h (93%) rename src/xenia/{app => ui}/moc_achievements_dialog_qt.cc (68%) diff --git a/src/xenia/app/game_list_dialog_qt.cc b/src/xenia/app/game_list_dialog_qt.cc index 486a200a3..724d38936 100644 --- a/src/xenia/app/game_list_dialog_qt.cc +++ b/src/xenia/app/game_list_dialog_qt.cc @@ -26,7 +26,6 @@ #include #include "third_party/fmt/include/fmt/format.h" -#include "xenia/app/achievements_dialog_qt.h" #include "xenia/app/emulator_window.h" #include "xenia/app/profile_dialog_qt.h" #include "xenia/app/profile_editor_dialog_qt.h" @@ -47,6 +46,7 @@ #include "xenia/kernel/xam/xam_state.h" #include "xenia/kernel/xam/xdbf/gpd_info_profile.h" #include "xenia/kernel/xam/xdbf/gpd_info_title.h" +#include "xenia/ui/achievements_dialog_qt.h" namespace xe { namespace app { @@ -1332,7 +1332,7 @@ void GameListDialogQt::ShowAchievementsDialog(uint64_t xuid, uint32_t title_id, return; } - auto* achievements_dialog = new AchievementsDialogQt( + auto* achievements_dialog = new xe::ui::AchievementsDialogQt( nullptr, kernel_state, &title_info.value(), profile); achievements_dialog->setAttribute(Qt::WA_DeleteOnClose); achievements_dialog->show(); diff --git a/src/xenia/cpu/ppc/testing/premake5.lua b/src/xenia/cpu/ppc/testing/premake5.lua index 6db094847..e8abca303 100644 --- a/src/xenia/cpu/ppc/testing/premake5.lua +++ b/src/xenia/cpu/ppc/testing/premake5.lua @@ -27,6 +27,17 @@ project("xenia-cpu-ppc-tests") "imgui", "mspack", }) + -- Qt is required because xenia-kernel now uses Qt for achievements dialog + filter("platforms:Linux") + local qt_dir = os.getenv("QT_DIR") + if qt_dir then + links({ + "Qt6Core", + "Qt6Gui", + "Qt6Widgets", + }) + end + filter({}) files({ "ppc_testing_main.cc", "../../../base/console_app_main_"..platform_suffix..".cc", diff --git a/src/xenia/kernel/xam/xam_ui.cc b/src/xenia/kernel/xam/xam_ui.cc index 9c9cea5a1..9cf3a96ac 100644 --- a/src/xenia/kernel/xam/xam_ui.cc +++ b/src/xenia/kernel/xam/xam_ui.cc @@ -21,12 +21,12 @@ #include "xenia/ui/imgui_drawer.h" #include "xenia/ui/imgui_guest_notification.h" -#include "xenia/app/achievements_dialog_qt.h" #include "xenia/kernel/xam/ui/create_profile_ui.h" #include "xenia/kernel/xam/ui/gamercard_ui.h" #include "xenia/kernel/xam/ui/passcode_ui.h" #include "xenia/kernel/xam/ui/signin_ui.h" #include "xenia/kernel/xam/ui/title_info_ui.h" +#include "xenia/ui/achievements_dialog_qt.h" #include "xenia/ui/window_qt.h" #include @@ -1025,8 +1025,8 @@ dword_result_t XamShowAchievementsUI_entry(dword_t user_index, if (qt_window && qt_window->qwindow()) { auto* kernel = kernel_state(); app_context.CallInUIThread([qt_window, kernel, info, user]() { - auto* dialog = new app::AchievementsDialogQt(qt_window->qwindow(), kernel, - &info.value(), user); + auto* dialog = new xe::ui::AchievementsDialogQt( + qt_window->qwindow(), kernel, &info.value(), user); dialog->show(); dialog->raise(); dialog->activateWindow(); diff --git a/src/xenia/app/achievements_dialog_qt.cc b/src/xenia/ui/achievements_dialog_qt.cc similarity index 99% rename from src/xenia/app/achievements_dialog_qt.cc rename to src/xenia/ui/achievements_dialog_qt.cc index d93c6f31d..1e20e99da 100644 --- a/src/xenia/app/achievements_dialog_qt.cc +++ b/src/xenia/ui/achievements_dialog_qt.cc @@ -7,7 +7,7 @@ ****************************************************************************** */ -#include "xenia/app/achievements_dialog_qt.h" +#include "xenia/ui/achievements_dialog_qt.h" #include #include @@ -25,7 +25,6 @@ #include #include "third_party/fmt/include/fmt/format.h" -#include "xenia/app/emulator_window.h" #include "xenia/base/chrono.h" #include "xenia/base/logging.h" #include "xenia/base/utf8.h" @@ -44,7 +43,7 @@ struct Achievement; } // namespace xe namespace xe { -namespace app { +namespace ui { AchievementsDialogQt::AchievementsDialogQt( QWidget* parent, kernel::KernelState* kernel_state, @@ -501,5 +500,5 @@ void AchievementsDialogQt::OnRefreshClicked() { LoadAchievements(); } -} // namespace app +} // namespace ui } // namespace xe diff --git a/src/xenia/app/achievements_dialog_qt.h b/src/xenia/ui/achievements_dialog_qt.h similarity index 93% rename from src/xenia/app/achievements_dialog_qt.h rename to src/xenia/ui/achievements_dialog_qt.h index c086c816f..0d5cd8188 100644 --- a/src/xenia/app/achievements_dialog_qt.h +++ b/src/xenia/ui/achievements_dialog_qt.h @@ -7,8 +7,8 @@ ****************************************************************************** */ -#ifndef XENIA_APP_ACHIEVEMENTS_DIALOG_QT_H_ -#define XENIA_APP_ACHIEVEMENTS_DIALOG_QT_H_ +#ifndef XENIA_UI_ACHIEVEMENTS_DIALOG_QT_H_ +#define XENIA_UI_ACHIEVEMENTS_DIALOG_QT_H_ #include #include @@ -35,7 +35,7 @@ class UserProfile; } // namespace xe namespace xe { -namespace app { +namespace ui { class AchievementsDialogQt : public QDialog { Q_OBJECT @@ -81,7 +81,7 @@ class AchievementsDialogQt : public QDialog { bool show_locked_info_; }; -} // namespace app +} // namespace ui } // namespace xe -#endif // XENIA_APP_ACHIEVEMENTS_DIALOG_QT_H_ +#endif // XENIA_UI_ACHIEVEMENTS_DIALOG_QT_H_ diff --git a/src/xenia/app/moc_achievements_dialog_qt.cc b/src/xenia/ui/moc_achievements_dialog_qt.cc similarity index 68% rename from src/xenia/app/moc_achievements_dialog_qt.cc rename to src/xenia/ui/moc_achievements_dialog_qt.cc index d3a72ab1f..931b1e312 100644 --- a/src/xenia/app/moc_achievements_dialog_qt.cc +++ b/src/xenia/ui/moc_achievements_dialog_qt.cc @@ -30,14 +30,14 @@ QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED QT_WARNING_DISABLE_GCC("-Wuseless-cast") namespace { -struct qt_meta_tag_ZN2xe3app20AchievementsDialogQtE_t {}; +struct qt_meta_tag_ZN2xe2ui20AchievementsDialogQtE_t {}; } // unnamed namespace template <> -constexpr inline auto xe::app::AchievementsDialogQt::qt_create_metaobjectdata< - qt_meta_tag_ZN2xe3app20AchievementsDialogQtE_t>() { +constexpr inline auto xe::ui::AchievementsDialogQt::qt_create_metaobjectdata< + qt_meta_tag_ZN2xe2ui20AchievementsDialogQtE_t>() { namespace QMC = QtMocConstants; - QtMocHelpers::StringRefStorage qt_stringData{"xe::app::AchievementsDialogQt", + QtMocHelpers::StringRefStorage qt_stringData{"xe::ui::AchievementsDialogQt", "OnShowLockedInfoChanged", "", "OnRefreshClicked"}; @@ -50,23 +50,23 @@ constexpr inline auto xe::app::AchievementsDialogQt::qt_create_metaobjectdata< QtMocHelpers::UintData qt_properties{}; QtMocHelpers::UintData qt_enums{}; return QtMocHelpers::metaObjectData< - AchievementsDialogQt, qt_meta_tag_ZN2xe3app20AchievementsDialogQtE_t>( + AchievementsDialogQt, qt_meta_tag_ZN2xe2ui20AchievementsDialogQtE_t>( QMC::MetaObjectFlag{}, qt_stringData, qt_methods, qt_properties, qt_enums); } -Q_CONSTINIT const QMetaObject xe::app::AchievementsDialogQt::staticMetaObject = { { +Q_CONSTINIT const QMetaObject xe::ui::AchievementsDialogQt::staticMetaObject = { { QMetaObject::SuperData::link(), - qt_staticMetaObjectStaticContent.stringdata, - qt_staticMetaObjectStaticContent.data, + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, qt_static_metacall, nullptr, - qt_staticMetaObjectRelocatingContent.metaTypes, + qt_staticMetaObjectRelocatingContent.metaTypes, nullptr } }; -void xe::app::AchievementsDialogQt::qt_static_metacall(QObject* _o, - QMetaObject::Call _c, - int _id, void** _a) { +void xe::ui::AchievementsDialogQt::qt_static_metacall(QObject* _o, + QMetaObject::Call _c, + int _id, void** _a) { auto* _t = static_cast(_o); if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { @@ -82,20 +82,20 @@ void xe::app::AchievementsDialogQt::qt_static_metacall(QObject* _o, (void)_a; } -const QMetaObject* xe::app::AchievementsDialogQt::metaObject() const { +const QMetaObject* xe::ui::AchievementsDialogQt::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; } -void* xe::app::AchievementsDialogQt::qt_metacast(const char* _clname) { +void* xe::ui::AchievementsDialogQt::qt_metacast(const char* _clname) { if (!_clname) return nullptr; - if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) return static_cast(this); return QDialog::qt_metacast(_clname); } -int xe::app::AchievementsDialogQt::qt_metacall(QMetaObject::Call _c, int _id, - void** _a) { +int xe::ui::AchievementsDialogQt::qt_metacall(QMetaObject::Call _c, int _id, + void** _a) { _id = QDialog::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) {