Merge pull request #50 from sudachi-emu/feature-1700-stubs
Reimplemented v17.0.0 functions
This commit is contained in:
commit
b45aac2e61
18 changed files with 130 additions and 35 deletions
|
@ -102,6 +102,8 @@ public:
|
|||
{150, nullptr, "CreateAuthorizationRequest"},
|
||||
{160, nullptr, "RequiresUpdateNetworkServiceAccountIdTokenCache"},
|
||||
{161, nullptr, "RequireReauthenticationOfNetworkServiceAccount"},
|
||||
{170, nullptr, "CreateDeviceHistoryRequest"}, // 17.0.0+
|
||||
{180, nullptr, "GetRequestForNintendoAccountReauthentication"} // 17.0.0+
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
@ -180,6 +182,7 @@ public:
|
|||
{150, nullptr, "CreateAuthorizationRequest"},
|
||||
{160, nullptr, "RequiresUpdateNetworkServiceAccountIdTokenCache"},
|
||||
{161, nullptr, "RequireReauthenticationOfNetworkServiceAccount"},
|
||||
{170, nullptr, "CreateDeviceHistoryRequest"}, // 17.0.0+
|
||||
{200, nullptr, "IsRegistered"},
|
||||
{201, nullptr, "RegisterAsync"},
|
||||
{202, nullptr, "UnregisterAsync"},
|
||||
|
@ -686,6 +689,11 @@ public:
|
|||
{103, nullptr, "GetProfileImage"},
|
||||
{110, nullptr, "RegisterUserAsync"},
|
||||
{111, nullptr, "GetUid"},
|
||||
{200, nullptr, "ApplyResponseForUserCreationAsync"}, // 17.0.0+
|
||||
{205, nullptr, "SuspendAfterApplyResponse"}, // 17.0.0+
|
||||
{210, nullptr, "IsProfileAvailable"}, // 17.0.0+
|
||||
{220, nullptr, "RegisterUserAsyncWithoutProfile"}, // 17.0.0+
|
||||
{221, nullptr, "RegisterUserWithProfileAsync"} // 17.0.0+
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
|
|
@ -50,6 +50,9 @@ ACC_SU::ACC_SU(std::shared_ptr<Module> module_, std::shared_ptr<ProfileManager>
|
|||
{210, nullptr, "CreateFloatingRegistrationRequest"},
|
||||
{211, nullptr, "CreateProcedureToRegisterUserWithNintendoAccount"},
|
||||
{212, nullptr, "ResumeProcedureToRegisterUserWithNintendoAccount"},
|
||||
{213, nullptr, "CreateProcedureToCreateUserWithNintendoAccount"}, // 17.0.0+
|
||||
{214, nullptr, "ResumeProcedureToCreateUserWithNintendoAccount"}, // 17.0.0+
|
||||
{215, nullptr, "ResumeProcedureToCreateUserWithNintendoAccountAfterApplyResponse"}, // 17.0.0+
|
||||
{230, nullptr, "AuthenticateServiceAsync"},
|
||||
{250, nullptr, "GetBaasAccountAdministrator"},
|
||||
{290, nullptr, "ProxyProcedureForGuestLoginWithNintendoAccount"},
|
||||
|
|
|
@ -20,6 +20,9 @@ SPSM::SPSM(Core::System& system_) : ServiceFramework{system_, "spsm"} {
|
|||
{9, nullptr, "ChangeHomeButtonLongPressingTime"},
|
||||
{10, nullptr, "PutErrorState"},
|
||||
{11, nullptr, "InvalidateCurrentHomeButtonPressing"},
|
||||
{12, nullptr, "Unknown12"}, // 17.0.0+
|
||||
{13, nullptr, "Unknown13"}, // 17.0.0+
|
||||
{14, nullptr, "Unknown14"} // 17.0.0+
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
|
|
@ -109,6 +109,7 @@ APM_Sys::APM_Sys(Core::System& system_, Controller& controller_)
|
|||
{5, nullptr, "LoadAndApplySettings"},
|
||||
{6, &APM_Sys::SetCpuBoostMode, "SetCpuBoostMode"},
|
||||
{7, &APM_Sys::GetCurrentPerformanceConfiguration, "GetCurrentPerformanceConfiguration"},
|
||||
{8, nullptr, "GetCurrentPerformanceMode"} // 17.0.0+
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
|
|
@ -37,6 +37,10 @@ IAlbumAccessorService::IAlbumAccessorService(Core::System& system_,
|
|||
{19, nullptr, "Unknown19"},
|
||||
{100, nullptr, "GetAlbumFileCountEx0"},
|
||||
{101, C<&IAlbumAccessorService::GetAlbumFileListEx0>, "GetAlbumFileListEx0"},
|
||||
{120, nullptr, "Unknown120"}, // 17.0.0+
|
||||
{130, nullptr, "Unknown130"}, // 17.0.0+
|
||||
{140, nullptr, "Unknown140"}, // 17.0.0+
|
||||
{150, nullptr, "Unknown150"}, // 17.0.0+
|
||||
{202, nullptr, "SaveEditedScreenShot"},
|
||||
{301, nullptr, "GetLastThumbnail"},
|
||||
{302, nullptr, "GetLastOverlayMovieThumbnail"},
|
||||
|
|
|
@ -28,6 +28,9 @@ IAlbumApplicationService::IAlbumApplicationService(Core::System& system_,
|
|||
{142, C<&IAlbumApplicationService::GetAlbumFileList3AaeAruid>, "GetAlbumFileList3AaeAruid"},
|
||||
{143, nullptr, "GetAlbumFileList4AaeUidAruid"},
|
||||
{144, nullptr, "GetAllAlbumFileList3AaeAruid"},
|
||||
{145, nullptr, "Unknown145"}, // 17.0.0+
|
||||
{146, nullptr, "Unknown146"}, // 17.0.0+
|
||||
{147, nullptr, "Unknown147"}, // 17.0.0+
|
||||
{60002, nullptr, "OpenAccessorSessionForApplication"},
|
||||
};
|
||||
// clang-format on
|
||||
|
|
|
@ -5,9 +5,11 @@
|
|||
|
||||
#include "common/logging/log.h"
|
||||
#include "core/hle/service/cmif_serialization.h"
|
||||
#include "core/hle/service/cmif_types.h"
|
||||
#include "core/hle/service/erpt/erpt.h"
|
||||
#include "core/hle/service/server_manager.h"
|
||||
#include "core/hle/service/service.h"
|
||||
#include "core/hle/service/set/system_settings_server.h"
|
||||
#include "core/hle/service/sm/sm.h"
|
||||
|
||||
namespace Service::ERPT {
|
||||
|
@ -15,6 +17,16 @@ namespace Service::ERPT {
|
|||
class ErrorReportContext final : public ServiceFramework<ErrorReportContext> {
|
||||
public:
|
||||
explicit ErrorReportContext(Core::System& system_) : ServiceFramework{system_, "erpt:c"} {
|
||||
Service::OutLargeData<Service::Set::FirmwareVersionFormat, 8> firmware_version = nullptr;
|
||||
system.ServiceManager()
|
||||
.GetService<Service::Set::ISystemSettingsServer>("set:sys", true)
|
||||
->GetFirmwareVersion(firmware_version);
|
||||
|
||||
FunctionInfo create_report = {11, C<&ErrorReportContext::CreateReport>, "CreateReport"};
|
||||
if (firmware_version->major > 17)
|
||||
create_report = {11, C<&ErrorReportContext::CreateReportV1>,
|
||||
"CreateReportV1"}; // 17.0.0+
|
||||
|
||||
// clang-format off
|
||||
static const FunctionInfo functions[] = {
|
||||
{0, C<&ErrorReportContext::SubmitContext>, "SubmitContext"},
|
||||
|
@ -28,8 +40,8 @@ public:
|
|||
{8, nullptr, "ClearApplicationLaunchTime"},
|
||||
{9, nullptr, "SubmitAttachment"},
|
||||
{10, nullptr, "CreateReportWithAttachments"},
|
||||
{11, C<&ErrorReportContext::CreateReportV1>, "CreateReportV1"},
|
||||
{12, C<&ErrorReportContext::CreateReport>, "CreateReport"},
|
||||
create_report,
|
||||
{12, C<&ErrorReportContext::CreateReport>, "CreateReport"}, // 17.0.0+
|
||||
{20, nullptr, "RegisterRunningApplet"},
|
||||
{21, nullptr, "UnregisterRunningApplet"},
|
||||
{22, nullptr, "UpdateAppletSuspendedDuration"},
|
||||
|
|
|
@ -85,6 +85,11 @@ public:
|
|||
{1019, nullptr, "Unknown1019"},
|
||||
{1020, nullptr, "Unknown1020"},
|
||||
{1021, nullptr, "Unknown1021"},
|
||||
{1023, nullptr, "Unknown1023"}, // 17.0.0+
|
||||
{1024, nullptr, "Unknown1024"}, // 17.0.0+
|
||||
{1025, nullptr, "Unknown1025"}, // 17.0.0+
|
||||
{1026, nullptr, "Unknown1026"}, // 17.0.0+
|
||||
{1027, nullptr, "Unknown1027"}, // 17.0.0+
|
||||
{1501, nullptr, "Unknown1501"},
|
||||
{1502, nullptr, "Unknown1502"},
|
||||
{1503, nullptr, "Unknown1503"},
|
||||
|
|
|
@ -3,10 +3,12 @@
|
|||
|
||||
#include <memory>
|
||||
|
||||
#include "core/hle/service/cmif_types.h"
|
||||
#include "core/hle/service/fgm/fgm.h"
|
||||
#include "core/hle/service/ipc_helpers.h"
|
||||
#include "core/hle/service/server_manager.h"
|
||||
#include "core/hle/service/service.h"
|
||||
#include "core/hle/service/set/system_settings_server.h"
|
||||
#include "core/hle/service/sm/sm.h"
|
||||
|
||||
namespace Service::FGM {
|
||||
|
@ -70,7 +72,19 @@ void LoopProcess(Core::System& system) {
|
|||
server_manager->RegisterNamedService("fgm", std::make_shared<FGM>(system, "fgm"));
|
||||
server_manager->RegisterNamedService("fgm:0", std::make_shared<FGM>(system, "fgm:0"));
|
||||
server_manager->RegisterNamedService("fgm:9", std::make_shared<FGM>(system, "fgm:9"));
|
||||
server_manager->RegisterNamedService("fgm:dbg", std::make_shared<FGM_DBG>(system));
|
||||
|
||||
Service::OutLargeData<Service::Set::FirmwareVersionFormat, 8> firmware_version = nullptr;
|
||||
system.ServiceManager()
|
||||
.GetService<Service::Set::ISystemSettingsServer>("set:sys", true)
|
||||
->GetFirmwareVersion(firmware_version);
|
||||
|
||||
LOG_DEBUG(Service_FGM, "major={}, display_version={}", firmware_version->major,
|
||||
std::string(firmware_version->display_version.begin(),
|
||||
firmware_version->display_version.end()));
|
||||
if (firmware_version->major < 17) {
|
||||
server_manager->RegisterNamedService("fgm:dbg", std::make_shared<FGM_DBG>(system));
|
||||
}
|
||||
|
||||
ServerManager::RunServer(std::move(server_manager));
|
||||
}
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ public:
|
|||
{1010, nullptr, "Unknown1010"},
|
||||
{1100, nullptr, "Unknown1100"},
|
||||
{1101, nullptr, "Unknown1101"},
|
||||
{1110, nullptr, "Unknown1110"}, // 17.0.0+
|
||||
{1200, nullptr, "Unknown1200"},
|
||||
{1201, nullptr, "Unknown1201"}
|
||||
};
|
||||
|
|
|
@ -215,6 +215,11 @@ public:
|
|||
{132, nullptr, "Unknown132"},
|
||||
{133, nullptr, "Unknown133"},
|
||||
{134, nullptr, "Unknown134"},
|
||||
{142, nullptr, "Unknown142"}, // 17.0.0+
|
||||
{143, nullptr, "Unknown143"}, // 17.0.0+
|
||||
{144, nullptr, "Unknown144"}, // 17.0.0+
|
||||
{3000, nullptr, "Unknown3000"}, // 17.0.0+
|
||||
{3001, nullptr, "Unknown3001"} // 17.0.0+
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
@ -232,6 +237,7 @@ public:
|
|||
{2, nullptr, "ClearDebugResponse"},
|
||||
{3, nullptr, "RegisterDebugResponse"},
|
||||
{4, &NIM_ECA::IsLargeResourceAvailable, "IsLargeResourceAvailable"},
|
||||
{5, nullptr, "CreateServerInterface2"} // 17.0.0+
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
|
|
@ -39,6 +39,14 @@ public:
|
|||
{32, nullptr, "DestroyTokenForBaaS"},
|
||||
{33, nullptr, "CreateTokenForBaaS"},
|
||||
{34, nullptr, "SetBaaSDeviceAccountIdList"},
|
||||
{35, nullptr, "LinkNsaId"}, // 17.0.0+
|
||||
{36, nullptr, "UnlinkNsaId"}, // 17.0.0+
|
||||
{40, nullptr, "GetNetworkServiceAccountIdTokenRequestEvent"}, // 17.0.0+
|
||||
{41, nullptr, "TryPopNetworkServiceAccountIdTokenRequestUid"}, // 17.0.0+
|
||||
{42, nullptr, "SetNetworkServiceAccountIdTokenSuccess"}, // 17.0.0+
|
||||
{43, nullptr, "SetNetworkServiceAccountIdTokenFailure"}, // 17.0.0+
|
||||
{44, nullptr, "SetUidList"}, // 17.0.0+
|
||||
{45, nullptr, "PutDigitalTwinKeyValue"}, // 17.0.0+
|
||||
{101, nullptr, "Suspend"},
|
||||
{102, nullptr, "Resume"},
|
||||
{103, nullptr, "GetState"},
|
||||
|
|
|
@ -16,6 +16,10 @@ void LoopProcess(Core::System& system) {
|
|||
std::make_shared<IPolicyManagerSystem>(system));
|
||||
server_manager->RegisterNamedService("omm", std::make_shared<IOperationModeManager>(system));
|
||||
server_manager->RegisterNamedService("spsm", std::make_shared<IPowerStateInterface>(system));
|
||||
/*
|
||||
TODO: (jarrodnorwell) ommdisp
|
||||
https://switchbrew.org/wiki/OMM_services#ommdisp
|
||||
*/
|
||||
ServerManager::RunServer(std::move(server_manager));
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,9 @@ public:
|
|||
{0, nullptr, "GetTemperatureRange"},
|
||||
{2, nullptr, "SetMeasurementMode"},
|
||||
{4, &ISession::GetTemperature, "GetTemperature"},
|
||||
{5, nullptr, "Unknown5"}, // 17.0.0+
|
||||
{6, nullptr, "Unknown6"}, // 17.0.0+
|
||||
{7, nullptr, "Unknown7"} // 17.0.0+
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
|
|
@ -1006,7 +1006,8 @@ BSD::BSD(Core::System& system_, const char* name)
|
|||
{30, nullptr, "SendMMsg"},
|
||||
{31, &BSD::EventFd, "EventFd"},
|
||||
{32, nullptr, "RegisterResourceStatisticsName"},
|
||||
{33, nullptr, "Initialize2"},
|
||||
{33, nullptr, "RegisterClientShared"},
|
||||
{35, nullptr, "NifIoctl"} // 17.0.0+
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
@ -1050,6 +1051,24 @@ BSDCFG::BSDCFG(Core::System& system_) : ServiceFramework{system_, "bsdcfg"} {
|
|||
{13, nullptr, "Unknown13"},
|
||||
{14, nullptr, "Unknown14"},
|
||||
{15, nullptr, "Unknown15"},
|
||||
{16, nullptr, "Unknown16"}, // 17.0.0+
|
||||
{17, nullptr, "Unknown17"}, // 17.0.0+
|
||||
{18, nullptr, "Unknown18"}, // 17.0.0+
|
||||
{19, nullptr, "Unknown19"}, // 17.0.0+
|
||||
{20, nullptr, "Unknown20"}, // 17.0.0+
|
||||
{21, nullptr, "Unknown21"}, // 17.0.0+
|
||||
{22, nullptr, "Unknown22"}, // 17.0.0+
|
||||
{23, nullptr, "Unknown23"}, // 17.0.0+
|
||||
{50, nullptr, "Unknown50"}, // 17.0.0+
|
||||
{51, nullptr, "Unknown51"}, // 17.0.0+
|
||||
{52, nullptr, "Unknown52"}, // 17.0.0+
|
||||
{53, nullptr, "Unknown53"}, // 17.0.0+
|
||||
{54, nullptr, "Unknown54"}, // 17.0.0+
|
||||
{55, nullptr, "Unknown55"}, // 17.0.0+
|
||||
{56, nullptr, "Unknown56"}, // 17.0.0+
|
||||
{57, nullptr, "Unknown57"}, // 17.0.0+
|
||||
{58, nullptr, "Unknown58"}, // 17.0.0+
|
||||
{100, nullptr, "Unknown100"} // 17.0.0+
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
|
|
@ -736,35 +736,35 @@ void GRenderWindow::wheelEvent(QWheelEvent* event) {
|
|||
}
|
||||
|
||||
void GRenderWindow::TouchBeginEvent(const QTouchEvent* event) {
|
||||
#ifdef ENABLE_QT6
|
||||
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
|
||||
QList<QTouchEvent::TouchPoint> touch_points = event->points();
|
||||
#else
|
||||
#else
|
||||
QList<QTouchEvent::TouchPoint> touch_points = event->touchPoints();
|
||||
#endif
|
||||
#endif
|
||||
for (const auto& touch_point : touch_points) {
|
||||
#ifdef ENABLE_QT6
|
||||
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
|
||||
const auto [x, y] = ScaleTouch(touch_point.position());
|
||||
#else
|
||||
#else
|
||||
const auto [x, y] = ScaleTouch(touch_point.pos());
|
||||
#endif
|
||||
#endif
|
||||
const auto [touch_x, touch_y] = MapToTouchScreen(x, y);
|
||||
input_subsystem->GetTouchScreen()->TouchPressed(touch_x, touch_y, touch_point.id());
|
||||
}
|
||||
}
|
||||
|
||||
void GRenderWindow::TouchUpdateEvent(const QTouchEvent* event) {
|
||||
#ifdef ENABLE_QT6
|
||||
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
|
||||
QList<QTouchEvent::TouchPoint> touch_points = event->points();
|
||||
#else
|
||||
#else
|
||||
QList<QTouchEvent::TouchPoint> touch_points = event->touchPoints();
|
||||
#endif
|
||||
#endif
|
||||
input_subsystem->GetTouchScreen()->ClearActiveFlag();
|
||||
for (const auto& touch_point : touch_points) {
|
||||
#ifdef ENABLE_QT6
|
||||
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
|
||||
const auto [x, y] = ScaleTouch(touch_point.position());
|
||||
#else
|
||||
#else
|
||||
const auto [x, y] = ScaleTouch(touch_point.pos());
|
||||
#endif
|
||||
#endif
|
||||
const auto [touch_x, touch_y] = MapToTouchScreen(x, y);
|
||||
input_subsystem->GetTouchScreen()->TouchMoved(touch_x, touch_y, touch_point.id());
|
||||
}
|
||||
|
|
|
@ -505,11 +505,11 @@ void TouchScreenPreview::mouseMoveEvent(QMouseEvent* event) {
|
|||
if (!coord_label) {
|
||||
return;
|
||||
}
|
||||
#ifdef ENABLE_QT6
|
||||
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
|
||||
const auto pos = MapToDeviceCoords(event->position().x(), event->position().y());
|
||||
#else
|
||||
#else
|
||||
const auto pos = MapToDeviceCoords(event->x(), event->y());
|
||||
#endif
|
||||
#endif
|
||||
if (pos) {
|
||||
coord_label->setText(QStringLiteral("X: %1, Y: %2").arg(pos->x()).arg(pos->y()));
|
||||
} else {
|
||||
|
@ -527,11 +527,11 @@ void TouchScreenPreview::mousePressEvent(QMouseEvent* event) {
|
|||
if (event->button() != Qt::MouseButton::LeftButton) {
|
||||
return;
|
||||
}
|
||||
#ifdef ENABLE_QT6
|
||||
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
|
||||
const auto pos = MapToDeviceCoords(event->position().x(), event->position().y());
|
||||
#else
|
||||
#else
|
||||
const auto pos = MapToDeviceCoords(event->x(), event->y());
|
||||
#endif
|
||||
#endif
|
||||
if (pos) {
|
||||
emit DotAdded(*pos);
|
||||
}
|
||||
|
@ -547,11 +547,11 @@ bool TouchScreenPreview::eventFilter(QObject* obj, QEvent* event) {
|
|||
emit DotSelected(obj->property(PropId).toInt());
|
||||
|
||||
drag_state.dot = qobject_cast<QLabel*>(obj);
|
||||
#ifdef ENABLE_QT6
|
||||
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
|
||||
drag_state.start_pos = mouse_event->globalPosition().toPoint();
|
||||
#else
|
||||
#else
|
||||
drag_state.start_pos = mouse_event->globalPos();
|
||||
#endif
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
case QEvent::Type::MouseMove: {
|
||||
|
@ -560,22 +560,23 @@ bool TouchScreenPreview::eventFilter(QObject* obj, QEvent* event) {
|
|||
}
|
||||
const auto mouse_event = static_cast<QMouseEvent*>(event);
|
||||
if (!drag_state.active) {
|
||||
#ifdef ENABLE_QT6
|
||||
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
|
||||
drag_state.active = (mouse_event->globalPosition().toPoint() - drag_state.start_pos)
|
||||
.manhattanLength() >= QApplication::startDragDistance();
|
||||
#else
|
||||
drag_state.active = (mouse_event->globalPos() - drag_state.start_pos)
|
||||
.manhattanLength() >= QApplication::startDragDistance();
|
||||
#endif
|
||||
#else
|
||||
drag_state.active =
|
||||
(mouse_event->globalPos() - drag_state.start_pos).manhattanLength() >=
|
||||
QApplication::startDragDistance();
|
||||
#endif
|
||||
if (!drag_state.active) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
#ifdef ENABLE_QT6
|
||||
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
|
||||
auto current_pos = mapFromGlobal(mouse_event->globalPosition().toPoint());
|
||||
#else
|
||||
#else
|
||||
auto current_pos = mapFromGlobal(mouse_event->globalPos());
|
||||
#endif
|
||||
#endif
|
||||
current_pos.setX(std::clamp(current_pos.x(), contentsMargins().left(),
|
||||
contentsMargins().left() + contentsRect().width() - 1));
|
||||
current_pos.setY(std::clamp(current_pos.y(), contentsMargins().top(),
|
||||
|
|
|
@ -256,10 +256,10 @@ void ConfigureUi::InitializeLanguageComboBox() {
|
|||
locale.truncate(locale.lastIndexOf(QLatin1Char{'.'}));
|
||||
locale.remove(0, locale.lastIndexOf(QLatin1Char{'/'}) + 1);
|
||||
const QString lang = QLocale::languageToString(QLocale(locale).language());
|
||||
#ifdef ENABLE_QT6
|
||||
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
|
||||
const QString territory = QLocale::territoryToString(QLocale(locale).territory());
|
||||
ui->language_combobox->addItem(QStringLiteral("%1 (%2)").arg(lang, territory), locale);
|
||||
#else
|
||||
#else
|
||||
const QString country = QLocale::countryToString(QLocale(locale).country());
|
||||
ui->language_combobox->addItem(QStringLiteral("%1 (%2)").arg(lang, country), locale);
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue