mirror of
https://github.com/Mahdi-zarei/nekoray.git
synced 2025-12-19 05:30:06 +08:00
add mozilla cert store support &&
fix c++ deprecation warnings
This commit is contained in:
parent
1fca654145
commit
ffba194f7c
@ -104,6 +104,7 @@ namespace Configs {
|
||||
bool skip_cert = false;
|
||||
QString utlsFingerprint = "";
|
||||
bool disable_run_admin = false; // windows only
|
||||
bool use_mozilla_certs = false;
|
||||
|
||||
// Remember
|
||||
QStringList remember_spmode = {};
|
||||
|
||||
@ -887,6 +887,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="mozilla_cert">
|
||||
<property name="text">
|
||||
<string>Use Mozilla Certificate Store</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="skip_cert">
|
||||
<property name="text">
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
namespace API {
|
||||
|
||||
Client::Client(std::function<void(const QString &)> onError, const QString &host, int port) {
|
||||
this->make_rpc_client = [=]() { return std::make_unique<protorpc::Client>(host.toStdString().c_str(), port); };
|
||||
this->make_rpc_client = [=,this]() { return std::make_unique<protorpc::Client>(host.toStdString().c_str(), port); };
|
||||
this->onError = std::move(onError);
|
||||
}
|
||||
|
||||
|
||||
@ -932,6 +932,7 @@ namespace Configs {
|
||||
}
|
||||
|
||||
status->result->coreConfig.insert("log", QJsonObject{{"level", dataStore->log_level}});
|
||||
status->result->coreConfig.insert("certificate", QJsonObject{{"store", dataStore->use_mozilla_certs ? "mozilla" : "system"}});
|
||||
status->result->coreConfig.insert("dns", dns);
|
||||
status->result->coreConfig.insert("inbounds", status->inbounds);
|
||||
status->result->coreConfig.insert("outbounds", status->outbounds);
|
||||
|
||||
@ -53,7 +53,7 @@ namespace Configs {
|
||||
onFinished();
|
||||
return;
|
||||
}
|
||||
QHostInfo::lookupHost(serverAddress, QApplication::instance(), [=](const QHostInfo &host) {
|
||||
QHostInfo::lookupHost(serverAddress, QApplication::instance(), [=,this](const QHostInfo &host) {
|
||||
auto addr = host.addresses();
|
||||
if (!addr.isEmpty()) {
|
||||
auto domain = serverAddress;
|
||||
|
||||
@ -668,7 +668,7 @@ namespace Subscription {
|
||||
updated_order += ent;
|
||||
}
|
||||
} catch (const fkyaml::exception &ex) {
|
||||
runOnUiThread([=] {
|
||||
runOnUiThread([=,this] {
|
||||
MessageBoxWarning("YAML Exception", ex.what());
|
||||
});
|
||||
}
|
||||
@ -695,7 +695,7 @@ namespace Subscription {
|
||||
if (items.indexOf(a) == 1) createNewGroup = true;
|
||||
}
|
||||
|
||||
runOnNewThread([=] {
|
||||
runOnNewThread([=,this] {
|
||||
auto gid = _sub_gid;
|
||||
if (createNewGroup) {
|
||||
auto group = Configs::ProfileManager::NewGroup();
|
||||
|
||||
@ -246,7 +246,7 @@ namespace Configs {
|
||||
ent->fn = QString("profiles/%1.json").arg(ent->id);
|
||||
}
|
||||
group->Save();
|
||||
runOnNewThread([=]
|
||||
runOnNewThread([=,this]
|
||||
{
|
||||
for (const auto& ent : ents) ent->Save();
|
||||
});
|
||||
@ -294,7 +294,7 @@ namespace Configs {
|
||||
}
|
||||
profilesIdOrder = newOrder;
|
||||
|
||||
runOnNewThread([=]
|
||||
runOnNewThread([=,this]
|
||||
{
|
||||
for (int id : deleted_ids) QFile(QString("profiles/%1.json").arg(id)).remove();
|
||||
});
|
||||
|
||||
@ -313,6 +313,7 @@ namespace Configs {
|
||||
_add(new configItem("disable_privilege_req", &disable_privilege_req, itemType::boolean));
|
||||
_add(new configItem("enable_tun_routing", &enable_tun_routing, itemType::boolean));
|
||||
_add(new configItem("speed_test_mode", &speed_test_mode, itemType::integer));
|
||||
_add(new configItem("use_mozilla_certs", &use_mozilla_certs, itemType::boolean));
|
||||
}
|
||||
|
||||
void DataStore::UpdateStartedId(int id) {
|
||||
|
||||
@ -84,7 +84,7 @@ namespace Stats
|
||||
|
||||
if (sort == Default)
|
||||
{
|
||||
runOnUiThread([=] {
|
||||
runOnUiThread([=,this] {
|
||||
auto m = GetMainWindow();
|
||||
m->UpdateConnectionList(toUpdate, toAdd);
|
||||
});
|
||||
@ -92,7 +92,7 @@ namespace Stats
|
||||
{
|
||||
if (sort == ByDownload)
|
||||
{
|
||||
std::sort(sorted.begin(), sorted.end(), [=](const ConnectionMetadata& a, const ConnectionMetadata& b)
|
||||
std::sort(sorted.begin(), sorted.end(), [=,this](const ConnectionMetadata& a, const ConnectionMetadata& b)
|
||||
{
|
||||
if (a.download == b.download) return asc ? a.id > b.id : a.id < b.id;
|
||||
return asc ? a.download < b.download : a.download > b.download;
|
||||
@ -100,7 +100,7 @@ namespace Stats
|
||||
}
|
||||
if (sort == ByUpload)
|
||||
{
|
||||
std::sort(sorted.begin(), sorted.end(), [=](const ConnectionMetadata& a, const ConnectionMetadata& b)
|
||||
std::sort(sorted.begin(), sorted.end(), [=,this](const ConnectionMetadata& a, const ConnectionMetadata& b)
|
||||
{
|
||||
if (a.upload == b.upload) return asc ? a.id > b.id : a.id < b.id;
|
||||
return asc ? a.upload < b.upload : a.upload > b.upload;
|
||||
@ -108,7 +108,7 @@ namespace Stats
|
||||
}
|
||||
if (sort == ByProcess)
|
||||
{
|
||||
std::sort(sorted.begin(), sorted.end(), [=](const ConnectionMetadata& a, const ConnectionMetadata& b)
|
||||
std::sort(sorted.begin(), sorted.end(), [=,this](const ConnectionMetadata& a, const ConnectionMetadata& b)
|
||||
{
|
||||
if (a.process == b.process) return asc ? a.id > b.id : a.id < b.id;
|
||||
return asc ? a.process > b.process : a.process < b.process;
|
||||
@ -116,7 +116,7 @@ namespace Stats
|
||||
}
|
||||
if (sort == ByOutbound)
|
||||
{
|
||||
std::sort(sorted.begin(), sorted.end(), [=](const ConnectionMetadata& a, const ConnectionMetadata& b)
|
||||
std::sort(sorted.begin(), sorted.end(), [=,this](const ConnectionMetadata& a, const ConnectionMetadata& b)
|
||||
{
|
||||
if (a.outbound == b.outbound) return asc ? a.id > b.id : a.id < b.id;
|
||||
return asc ? a.outbound > b.outbound : a.outbound < b.outbound;
|
||||
@ -124,13 +124,13 @@ namespace Stats
|
||||
}
|
||||
if (sort == ByProtocol)
|
||||
{
|
||||
std::sort(sorted.begin(), sorted.end(), [=](const ConnectionMetadata& a, const ConnectionMetadata& b)
|
||||
std::sort(sorted.begin(), sorted.end(), [=,this](const ConnectionMetadata& a, const ConnectionMetadata& b)
|
||||
{
|
||||
if (a.protocol == b.protocol) return asc ? a.id > b.id : a.id < b.id;
|
||||
return asc ? a.protocol > b.protocol : a.protocol < b.protocol;
|
||||
});
|
||||
}
|
||||
runOnUiThread([=] {
|
||||
runOnUiThread([=,this] {
|
||||
auto m = GetMainWindow();
|
||||
m->UpdateConnectionListWithRecreate(sorted);
|
||||
});
|
||||
|
||||
@ -78,12 +78,12 @@ namespace Stats {
|
||||
// 停止
|
||||
if (looping) {
|
||||
looping = false;
|
||||
runOnUiThread([=] {
|
||||
runOnUiThread([=,this] {
|
||||
auto m = GetMainWindow();
|
||||
m->refresh_status("STOP");
|
||||
});
|
||||
}
|
||||
runOnUiThread([=]
|
||||
runOnUiThread([=,this]
|
||||
{
|
||||
auto m = GetMainWindow();
|
||||
m->update_traffic_graph(0, 0, 0, 0);
|
||||
@ -104,7 +104,7 @@ namespace Stats {
|
||||
loop_mutex.unlock();
|
||||
|
||||
// post to UI
|
||||
runOnUiThread([=] {
|
||||
runOnUiThread([=,this] {
|
||||
auto m = GetMainWindow();
|
||||
if (proxy != nullptr) {
|
||||
m->refresh_status(QObject::tr("Proxy: %1\nDirect: %2").arg(proxy->DisplaySpeed(), direct->DisplaySpeed()));
|
||||
|
||||
@ -75,7 +75,7 @@ namespace Configs_sys {
|
||||
// Restart
|
||||
start_profile_when_core_is_up = Configs::dataStore->started_id;
|
||||
MW_show_log("[Fatal] " + QObject::tr("Core exited, restarting."));
|
||||
setTimeout([=] { Restart(); }, this, 200);
|
||||
setTimeout([=,this] { Restart(); }, this, 200);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -50,7 +50,7 @@ GroupItem::GroupItem(QWidget *parent, const std::shared_ptr<Configs::Group> &ent
|
||||
if (ent == nullptr) return;
|
||||
|
||||
connect(this, &GroupItem::edit_clicked, this, &GroupItem::on_edit_clicked);
|
||||
connect(Subscription::groupUpdater, &Subscription::GroupUpdater::asyncUpdateCallback, this, [=](int gid) { if (gid == this->ent->id) refresh_data(); });
|
||||
connect(Subscription::groupUpdater, &Subscription::GroupUpdater::asyncUpdateCallback, this, [=,this](int gid) { if (gid == this->ent->id) refresh_data(); });
|
||||
|
||||
refresh_data();
|
||||
}
|
||||
@ -89,7 +89,7 @@ void GroupItem::refresh_data() {
|
||||
}
|
||||
}
|
||||
runOnThread(
|
||||
[=] {
|
||||
[=,this] {
|
||||
adjustSize();
|
||||
item->setSizeHint(sizeHint());
|
||||
dynamic_cast<QWidget *>(parent())->adjustSize();
|
||||
@ -103,7 +103,7 @@ void GroupItem::on_update_sub_clicked() {
|
||||
|
||||
void GroupItem::on_edit_clicked() {
|
||||
auto dialog = new DialogEditGroup(ent, parentWindow);
|
||||
connect(dialog, &QDialog::finished, this, [=] {
|
||||
connect(dialog, &QDialog::finished, this, [=,this] {
|
||||
if (dialog->result() == QDialog::Accepted) {
|
||||
ent->Save();
|
||||
refresh_data();
|
||||
|
||||
@ -7,13 +7,13 @@
|
||||
#include <QStringListModel>
|
||||
#include <QCompleter>
|
||||
|
||||
#define ADJUST_SIZE runOnThread([=] { adjustSize(); adjustPosition(mainwindow); }, this);
|
||||
#define ADJUST_SIZE runOnThread([=,this] { adjustSize(); adjustPosition(mainwindow); }, this);
|
||||
|
||||
DialogEditGroup::DialogEditGroup(const std::shared_ptr<Configs::Group> &ent, QWidget *parent) : QDialog(parent), ui(new Ui::DialogEditGroup) {
|
||||
ui->setupUi(this);
|
||||
this->ent = ent;
|
||||
|
||||
connect(ui->type, &QComboBox::currentIndexChanged, this, [=](int index) {
|
||||
connect(ui->type, &QComboBox::currentIndexChanged, this, [=,this](int index) {
|
||||
ui->cat_sub->setHidden(index == 0);
|
||||
ADJUST_SIZE
|
||||
});
|
||||
@ -55,7 +55,7 @@ DialogEditGroup::DialogEditGroup(const std::shared_ptr<Configs::Group> &ent, QWi
|
||||
frontCompleter->setFilterMode(Qt::MatchContains);
|
||||
ui->front_proxy->setCompleter(nullptr);
|
||||
ui->front_proxy->lineEdit()->setCompleter(frontCompleter);
|
||||
connect(ui->front_proxy, &QComboBox::currentTextChanged, this, [=](const QString &txt){
|
||||
connect(ui->front_proxy, &QComboBox::currentTextChanged, this, [=,this](const QString &txt){
|
||||
CACHE.front_proxy = get_proxy_id(txt);
|
||||
});
|
||||
|
||||
@ -69,11 +69,11 @@ DialogEditGroup::DialogEditGroup(const std::shared_ptr<Configs::Group> &ent, QWi
|
||||
landingCompleter->setFilterMode(Qt::MatchContains);
|
||||
ui->landing_proxy->setCompleter(nullptr);
|
||||
ui->landing_proxy->lineEdit()->setCompleter(frontCompleter);
|
||||
connect(ui->landing_proxy, &QComboBox::currentTextChanged, this, [=](const QString &txt){
|
||||
connect(ui->landing_proxy, &QComboBox::currentTextChanged, this, [=,this](const QString &txt){
|
||||
LANDING.landing_proxy = get_proxy_id(txt);
|
||||
});
|
||||
|
||||
connect(ui->copy_links, &QPushButton::clicked, this, [=] {
|
||||
connect(ui->copy_links, &QPushButton::clicked, this, [=,this] {
|
||||
QStringList links;
|
||||
for (const auto &[_, profile]: Configs::profileManager->profiles) {
|
||||
if (profile->gid != ent->id) continue;
|
||||
@ -82,7 +82,7 @@ DialogEditGroup::DialogEditGroup(const std::shared_ptr<Configs::Group> &ent, QWi
|
||||
QApplication::clipboard()->setText(links.join("\n"));
|
||||
MessageBoxInfo(software_name, tr("Copied"));
|
||||
});
|
||||
connect(ui->copy_links_nkr, &QPushButton::clicked, this, [=] {
|
||||
connect(ui->copy_links_nkr, &QPushButton::clicked, this, [=,this] {
|
||||
QStringList links;
|
||||
for (const auto &[_, profile]: Configs::profileManager->profiles) {
|
||||
if (profile->gid != ent->id) continue;
|
||||
|
||||
@ -27,7 +27,7 @@ DialogManageGroups::DialogManageGroups(QWidget *parent) : QDialog(parent), ui(ne
|
||||
AddGroupToListIfExist(id)
|
||||
}
|
||||
|
||||
connect(ui->listWidget, &QListWidget::itemDoubleClicked, this, [=](QListWidgetItem *wI) {
|
||||
connect(ui->listWidget, &QListWidget::itemDoubleClicked, this, [=,this](QListWidgetItem *wI) {
|
||||
auto w = dynamic_cast<GroupItem *>(ui->listWidget->itemWidget(wI));
|
||||
emit w->edit_clicked();
|
||||
});
|
||||
|
||||
@ -63,8 +63,8 @@ void UI_InitMainWindow() {
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
|
||||
mainwindow = this;
|
||||
MW_dialog_message = [=](const QString &a, const QString &b) {
|
||||
runOnUiThread([=]
|
||||
MW_dialog_message = [=,this](const QString &a, const QString &b) {
|
||||
runOnUiThread([=,this]
|
||||
{
|
||||
dialog_message_impl(a, b);
|
||||
});
|
||||
@ -92,12 +92,12 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
ui->masterLogBrowser->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
|
||||
connect(qApp->styleHints(), &QStyleHints::colorSchemeChanged, this, [=](const Qt::ColorScheme& scheme) {
|
||||
connect(qApp->styleHints(), &QStyleHints::colorSchemeChanged, this, [=,this](const Qt::ColorScheme& scheme) {
|
||||
new SyntaxHighlighter(scheme == Qt::ColorScheme::Dark, qvLogDocument);
|
||||
themeManager->ApplyTheme(Configs::dataStore->theme, true);
|
||||
});
|
||||
#endif
|
||||
connect(themeManager, &ThemeManager::themeChanged, this, [=](const QString& theme){
|
||||
connect(themeManager, &ThemeManager::themeChanged, this, [=,this](const QString& theme){
|
||||
if (theme.toLower().contains("vista")) {
|
||||
// light themes
|
||||
new SyntaxHighlighter(false, qvLogDocument);
|
||||
@ -109,20 +109,20 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
new SyntaxHighlighter(isDarkMode(), qvLogDocument);
|
||||
}
|
||||
});
|
||||
connect(ui->masterLogBrowser->verticalScrollBar(), &QSlider::valueChanged, this, [=](int value) {
|
||||
connect(ui->masterLogBrowser->verticalScrollBar(), &QSlider::valueChanged, this, [=,this](int value) {
|
||||
if (ui->masterLogBrowser->verticalScrollBar()->maximum() == value)
|
||||
qvLogAutoScoll = true;
|
||||
else
|
||||
qvLogAutoScoll = false;
|
||||
});
|
||||
connect(ui->masterLogBrowser, &QTextBrowser::textChanged, this, [=]() {
|
||||
connect(ui->masterLogBrowser, &QTextBrowser::textChanged, this, [=,this]() {
|
||||
if (!qvLogAutoScoll)
|
||||
return;
|
||||
auto bar = ui->masterLogBrowser->verticalScrollBar();
|
||||
bar->setValue(bar->maximum());
|
||||
});
|
||||
MW_show_log = [=](const QString &log) {
|
||||
runOnUiThread([=] { show_log_impl(log); });
|
||||
MW_show_log = [=,this](const QString &log) {
|
||||
runOnUiThread([=,this] { show_log_impl(log); });
|
||||
};
|
||||
|
||||
// Listen port if random
|
||||
@ -145,7 +145,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
|
||||
// Start core
|
||||
runOnThread(
|
||||
[=] {
|
||||
[=,this] {
|
||||
core_process = new Configs_sys::CoreProcess(core_path, args);
|
||||
// Remember last started
|
||||
if (Configs::dataStore->remember_enable && Configs::dataStore->remember_id >= 0) {
|
||||
@ -170,9 +170,9 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
|
||||
parallelCoreCallPool->setMaxThreadCount(10); // constant value
|
||||
//
|
||||
connect(ui->menu_start, &QAction::triggered, this, [=]() { profile_start(); });
|
||||
connect(ui->menu_stop, &QAction::triggered, this, [=]() { profile_stop(false, false, true); });
|
||||
connect(ui->tabWidget->tabBar(), &QTabBar::tabMoved, this, [=](int from, int to) {
|
||||
connect(ui->menu_start, &QAction::triggered, this, [=,this]() { profile_start(); });
|
||||
connect(ui->menu_stop, &QAction::triggered, this, [=,this]() { profile_stop(false, false, true); });
|
||||
connect(ui->tabWidget->tabBar(), &QTabBar::tabMoved, this, [=,this](int from, int to) {
|
||||
// use tabData to track tab & gid
|
||||
Configs::profileManager->groupsTabOrder.clear();
|
||||
for (int i = 0; i < ui->tabWidget->tabBar()->count(); i++) {
|
||||
@ -220,7 +220,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
ui->toolButton_server->setMenu(ui->menu_server);
|
||||
ui->toolButton_routing->setMenu(ui->menuRouting_Menu);
|
||||
ui->menubar->setVisible(false);
|
||||
connect(ui->toolButton_update, &QToolButton::clicked, this, [=] { runOnNewThread([=] { CheckUpdate(); }); });
|
||||
connect(ui->toolButton_update, &QToolButton::clicked, this, [=,this] { runOnNewThread([=,this] { CheckUpdate(); }); });
|
||||
if (!QFile::exists(QApplication::applicationDirPath() + "/updater") && !QFile::exists(QApplication::applicationDirPath() + "/updater.exe"))
|
||||
{
|
||||
ui->toolButton_update->hide();
|
||||
@ -229,11 +229,11 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
// setup connection UI
|
||||
setupConnectionList();
|
||||
ui->stats_widget->tabBar()->setCurrentIndex(Configs::dataStore->stats_tab);
|
||||
connect(ui->stats_widget->tabBar(), &QTabBar::currentChanged, this, [=](int index)
|
||||
connect(ui->stats_widget->tabBar(), &QTabBar::currentChanged, this, [=,this](int index)
|
||||
{
|
||||
Configs::dataStore->stats_tab = ui->stats_widget->tabBar()->currentIndex();
|
||||
});
|
||||
connect(ui->connections->horizontalHeader(), &QHeaderView::sectionClicked, this, [=](int index)
|
||||
connect(ui->connections->horizontalHeader(), &QHeaderView::sectionClicked, this, [=,this](int index)
|
||||
{
|
||||
Stats::ConnectionSort sortType;
|
||||
|
||||
@ -255,7 +255,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
ui->graph_tab->layout()->addWidget(speedChartWidget);
|
||||
|
||||
// table UI
|
||||
ui->proxyListTable->rowsSwapped = [=](int row1, int row2)
|
||||
ui->proxyListTable->rowsSwapped = [=,this](int row1, int row2)
|
||||
{
|
||||
if (row1 == row2) return;
|
||||
auto group = Configs::profileManager->CurrentGroup();
|
||||
@ -265,9 +265,9 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
};
|
||||
if (auto button = ui->proxyListTable->findChild<QAbstractButton *>(QString(), Qt::FindDirectChildrenOnly)) {
|
||||
// Corner Button
|
||||
connect(button, &QAbstractButton::clicked, this, [=] { refresh_proxy_list_impl(-1, {GroupSortMethod::ById}); });
|
||||
connect(button, &QAbstractButton::clicked, this, [=,this] { refresh_proxy_list_impl(-1, {GroupSortMethod::ById}); });
|
||||
}
|
||||
connect(ui->proxyListTable->horizontalHeader(), &QHeaderView::sectionClicked, this, [=](int logicalIndex) {
|
||||
connect(ui->proxyListTable->horizontalHeader(), &QHeaderView::sectionClicked, this, [=, this](int logicalIndex) {
|
||||
GroupSortAction action;
|
||||
if (proxy_last_order == logicalIndex) {
|
||||
action.descending = true;
|
||||
@ -290,7 +290,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
refresh_proxy_list_impl(-1, action);
|
||||
Configs::profileManager->CurrentGroup()->Save();
|
||||
});
|
||||
connect(ui->proxyListTable->horizontalHeader(), &QHeaderView::sectionResized, this, [=](int logicalIndex, int oldSize, int newSize) {
|
||||
connect(ui->proxyListTable->horizontalHeader(), &QHeaderView::sectionResized, this, [=, this](int logicalIndex, int oldSize, int newSize) {
|
||||
auto group = Configs::profileManager->CurrentGroup();
|
||||
if (Configs::dataStore->refreshing_group || group == nullptr || !group->manually_column_width) return;
|
||||
// save manually column width
|
||||
@ -305,7 +305,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
ui->proxyListTable->setTabKeyNavigation(false);
|
||||
|
||||
// search box
|
||||
connect(shortcut_esc, &QShortcut::activated, this, [=] {
|
||||
connect(shortcut_esc, &QShortcut::activated, this, [=,this] {
|
||||
if (select_mode) {
|
||||
emit profile_selected(-1);
|
||||
select_mode = false;
|
||||
@ -333,7 +333,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
trayMenu->addAction(ui->menu_exit);
|
||||
tray->setVisible(!Configs::dataStore->disable_tray);
|
||||
tray->setContextMenu(trayMenu);
|
||||
connect(tray, &QSystemTrayIcon::activated, qApp, [=](QSystemTrayIcon::ActivationReason reason) {
|
||||
connect(tray, &QSystemTrayIcon::activated, qApp, [=, this](QSystemTrayIcon::ActivationReason reason) {
|
||||
if (reason == QSystemTrayIcon::Trigger) {
|
||||
ActivateWindow(this);
|
||||
}
|
||||
@ -344,41 +344,41 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
ui->actionStart_with_system->setChecked(AutoRun_IsEnabled());
|
||||
ui->actionAllow_LAN->setChecked(QStringList{"::", "0.0.0.0"}.contains(Configs::dataStore->inbound_address));
|
||||
|
||||
connect(ui->menu_open_config_folder, &QAction::triggered, this, [=] { QDesktopServices::openUrl(QUrl::fromLocalFile(QDir::currentPath())); });
|
||||
connect(ui->menu_open_config_folder, &QAction::triggered, this, [=,this] { QDesktopServices::openUrl(QUrl::fromLocalFile(QDir::currentPath())); });
|
||||
connect(ui->menu_add_from_clipboard2, &QAction::triggered, ui->menu_add_from_clipboard, &QAction::trigger);
|
||||
connect(ui->actionRestart_Proxy, &QAction::triggered, this, [=] { if (Configs::dataStore->started_id>=0) profile_start(Configs::dataStore->started_id); });
|
||||
connect(ui->actionRestart_Program, &QAction::triggered, this, [=] { MW_dialog_message("", "RestartProgram"); });
|
||||
connect(ui->actionShow_window, &QAction::triggered, this, [=] { ActivateWindow(this); });
|
||||
connect(ui->actionRemember_last_proxy, &QAction::triggered, this, [=](bool checked) {
|
||||
connect(ui->actionRestart_Proxy, &QAction::triggered, this, [=,this] { if (Configs::dataStore->started_id>=0) profile_start(Configs::dataStore->started_id); });
|
||||
connect(ui->actionRestart_Program, &QAction::triggered, this, [=,this] { MW_dialog_message("", "RestartProgram"); });
|
||||
connect(ui->actionShow_window, &QAction::triggered, this, [=,this] { ActivateWindow(this); });
|
||||
connect(ui->actionRemember_last_proxy, &QAction::triggered, this, [=,this](bool checked) {
|
||||
Configs::dataStore->remember_enable = checked;
|
||||
ui->actionRemember_last_proxy->setChecked(checked);
|
||||
Configs::dataStore->Save();
|
||||
});
|
||||
connect(ui->actionStart_with_system, &QAction::triggered, this, [=](bool checked) {
|
||||
connect(ui->actionStart_with_system, &QAction::triggered, this, [=,this](bool checked) {
|
||||
AutoRun_SetEnabled(checked);
|
||||
ui->actionStart_with_system->setChecked(checked);
|
||||
});
|
||||
connect(ui->actionAllow_LAN, &QAction::triggered, this, [=](bool checked) {
|
||||
connect(ui->actionAllow_LAN, &QAction::triggered, this, [=,this](bool checked) {
|
||||
Configs::dataStore->inbound_address = checked ? "::" : "127.0.0.1";
|
||||
ui->actionAllow_LAN->setChecked(checked);
|
||||
MW_dialog_message("", "UpdateDataStore");
|
||||
});
|
||||
//
|
||||
connect(ui->checkBox_VPN, &QCheckBox::clicked, this, [=](bool checked) { set_spmode_vpn(checked); });
|
||||
connect(ui->checkBox_SystemProxy, &QCheckBox::clicked, this, [=](bool checked) { set_spmode_system_proxy(checked); });
|
||||
connect(ui->menu_spmode, &QMenu::aboutToShow, this, [=]() {
|
||||
connect(ui->checkBox_VPN, &QCheckBox::clicked, this, [=,this](bool checked) { set_spmode_vpn(checked); });
|
||||
connect(ui->checkBox_SystemProxy, &QCheckBox::clicked, this, [=,this](bool checked) { set_spmode_system_proxy(checked); });
|
||||
connect(ui->menu_spmode, &QMenu::aboutToShow, this, [=,this]() {
|
||||
ui->menu_spmode_disabled->setChecked(!(Configs::dataStore->spmode_system_proxy || Configs::dataStore->spmode_vpn));
|
||||
ui->menu_spmode_system_proxy->setChecked(Configs::dataStore->spmode_system_proxy);
|
||||
ui->menu_spmode_vpn->setChecked(Configs::dataStore->spmode_vpn);
|
||||
});
|
||||
connect(ui->menu_spmode_system_proxy, &QAction::triggered, this, [=](bool checked) { set_spmode_system_proxy(checked); });
|
||||
connect(ui->menu_spmode_vpn, &QAction::triggered, this, [=](bool checked) { set_spmode_vpn(checked); });
|
||||
connect(ui->menu_spmode_disabled, &QAction::triggered, this, [=]() {
|
||||
connect(ui->menu_spmode_system_proxy, &QAction::triggered, this, [=,this](bool checked) { set_spmode_system_proxy(checked); });
|
||||
connect(ui->menu_spmode_vpn, &QAction::triggered, this, [=,this](bool checked) { set_spmode_vpn(checked); });
|
||||
connect(ui->menu_spmode_disabled, &QAction::triggered, this, [=,this]() {
|
||||
set_spmode_system_proxy(false);
|
||||
set_spmode_vpn(false);
|
||||
});
|
||||
connect(ui->menu_qr, &QAction::triggered, this, [=]() { display_qr_link(false); });
|
||||
connect(ui->system_dns, &QCheckBox::clicked, this, [=](bool checked) {
|
||||
connect(ui->menu_qr, &QAction::triggered, this, [=,this]() { display_qr_link(false); });
|
||||
connect(ui->system_dns, &QCheckBox::clicked, this, [=,this](bool checked) {
|
||||
if (const auto ok = set_system_dns(checked); !ok) {
|
||||
ui->system_dns->setChecked(!checked);
|
||||
} else {
|
||||
@ -390,7 +390,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
ui->system_dns->hide();
|
||||
#endif
|
||||
|
||||
connect(ui->menu_server, &QMenu::aboutToShow, this, [=](){
|
||||
connect(ui->menu_server, &QMenu::aboutToShow, this, [=,this](){
|
||||
if (running)
|
||||
{
|
||||
ui->actionSpeedtest_Current->setEnabled(true);
|
||||
@ -417,7 +417,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
}
|
||||
});
|
||||
|
||||
auto getRemoteRouteProfiles = [=]
|
||||
auto getRemoteRouteProfiles = [=,this]
|
||||
{
|
||||
auto resp = NetworkRequestHelper::HttpGet("https://api.github.com/repos/throneproj/routeprofiles/releases/latest");
|
||||
if (resp.error.isEmpty()) {
|
||||
@ -437,7 +437,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
};
|
||||
runOnNewThread(getRemoteRouteProfiles);
|
||||
|
||||
connect(ui->menuRouting_Menu, &QMenu::aboutToShow, this, [=]()
|
||||
connect(ui->menuRouting_Menu, &QMenu::aboutToShow, this, [=,this]()
|
||||
{
|
||||
// refresh it on every menu show
|
||||
runOnNewThread(getRemoteRouteProfiles);
|
||||
@ -450,11 +450,11 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
{
|
||||
auto* action = new QAction(profilesMenu);
|
||||
action->setText(profile);
|
||||
connect(action, &QAction::triggered, this, [=]()
|
||||
connect(action, &QAction::triggered, this, [=,this]()
|
||||
{
|
||||
auto resp = NetworkRequestHelper::HttpGet("https://github.com/throneproj/routeprofiles/releases/latest/download/" + profile + ".json");
|
||||
if (!resp.error.isEmpty()) {
|
||||
runOnUiThread([=] {
|
||||
runOnUiThread([=,this] {
|
||||
MessageBoxWarning(QObject::tr("Download Profiles"), QObject::tr("Requesting profile error: %1").arg(resp.error + "\n" + resp.data));
|
||||
});
|
||||
return;
|
||||
@ -462,7 +462,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
auto err = new QString;
|
||||
auto parsed = Configs::RoutingChain::parseJsonArray(QString2QJsonArray(resp.data), err);
|
||||
if (!err->isEmpty()) {
|
||||
runOnUiThread([=]
|
||||
runOnUiThread([=,this]
|
||||
{
|
||||
MessageBoxInfo(tr("Invalid JSON Array"), tr("The provided input cannot be parsed to a valid route rule array:\n") + *err);
|
||||
});
|
||||
@ -488,7 +488,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
action->setData(route.second->id);
|
||||
action->setCheckable(true);
|
||||
action->setChecked(Configs::dataStore->routing->current_route_id == route.first);
|
||||
connect(action, &QAction::triggered, this, [=]()
|
||||
connect(action, &QAction::triggered, this, [=,this]()
|
||||
{
|
||||
auto routeID = action->data().toInt();
|
||||
if (Configs::dataStore->routing->current_route_id == routeID) return;
|
||||
@ -499,39 +499,39 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
ui->menuRouting_Menu->addAction(action);
|
||||
}
|
||||
});
|
||||
connect(ui->actionUrl_Test_Selected, &QAction::triggered, this, [=]() {
|
||||
connect(ui->actionUrl_Test_Selected, &QAction::triggered, this, [=,this]() {
|
||||
urltest_current_group(get_now_selected_list());
|
||||
});
|
||||
connect(ui->actionUrl_Test_Group, &QAction::triggered, this, [=]() {
|
||||
connect(ui->actionUrl_Test_Group, &QAction::triggered, this, [=,this]() {
|
||||
urltest_current_group(Configs::profileManager->CurrentGroup()->GetProfileEnts());
|
||||
});
|
||||
connect(ui->actionSpeedtest_Current, &QAction::triggered, this, [=]()
|
||||
connect(ui->actionSpeedtest_Current, &QAction::triggered, this, [=,this]()
|
||||
{
|
||||
if (running != nullptr)
|
||||
{
|
||||
speedtest_current_group({}, true);
|
||||
}
|
||||
});
|
||||
connect(ui->actionSpeedtest_Selected, &QAction::triggered, this, [=]()
|
||||
connect(ui->actionSpeedtest_Selected, &QAction::triggered, this, [=,this]()
|
||||
{
|
||||
speedtest_current_group(get_now_selected_list());
|
||||
});
|
||||
connect(ui->actionSpeedtest_Group, &QAction::triggered, this, [=]()
|
||||
connect(ui->actionSpeedtest_Group, &QAction::triggered, this, [=,this]()
|
||||
{
|
||||
speedtest_current_group(Configs::profileManager->CurrentGroup()->GetProfileEnts());
|
||||
});
|
||||
connect(ui->menu_stop_testing, &QAction::triggered, this, [=]() { stopTests(); });
|
||||
connect(ui->menu_stop_testing, &QAction::triggered, this, [=,this]() { stopTests(); });
|
||||
//
|
||||
auto set_selected_or_group = [=](int mode) {
|
||||
auto set_selected_or_group = [=,this](int mode) {
|
||||
// 0=group 1=select 2=unknown(menu is hide)
|
||||
ui->menu_server->setProperty("selected_or_group", mode);
|
||||
};
|
||||
connect(ui->menu_server, &QMenu::aboutToHide, this, [=] {
|
||||
setTimeout([=] { set_selected_or_group(2); }, this, 200);
|
||||
connect(ui->menu_server, &QMenu::aboutToHide, this, [=,this] {
|
||||
setTimeout([=,this] { set_selected_or_group(2); }, this, 200);
|
||||
});
|
||||
set_selected_or_group(2);
|
||||
//
|
||||
connect(ui->menu_share_item, &QMenu::aboutToShow, this, [=] {
|
||||
connect(ui->menu_share_item, &QMenu::aboutToShow, this, [=,this] {
|
||||
QString name;
|
||||
auto selected = get_now_selected_list();
|
||||
if (!selected.isEmpty()) {
|
||||
@ -546,7 +546,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
connect(qApp, &QGuiApplication::commitDataRequest, this, &MainWindow::on_commitDataRequest);
|
||||
|
||||
auto t = new QTimer;
|
||||
connect(t, &QTimer::timeout, this, [=]() { refresh_status(); });
|
||||
connect(t, &QTimer::timeout, this, [=,this]() { refresh_status(); });
|
||||
t->start(2000);
|
||||
|
||||
t = new QTimer;
|
||||
@ -569,7 +569,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
auto reset_interval = Configs::GeoAssets::ResetAssetsOptions[Configs::dataStore->auto_reset_assets_idx];
|
||||
if (reset_interval > 0 && QDateTime::currentSecsSinceEpoch() - Configs::dataStore->last_asset_reset_epoch_secs > reset_interval)
|
||||
{
|
||||
runOnNewThread([=]
|
||||
runOnNewThread([=,this]
|
||||
{
|
||||
ResetAssets(Configs::dataStore->geoip_download_url, Configs::dataStore->geosite_download_url);
|
||||
});
|
||||
@ -582,7 +582,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
if (Configs::NeedGeoAssets()) {
|
||||
auto n = QMessageBox::warning(GetMessageBoxParent(), software_name, tr("Geo Assets are missing, want to download them now?"), QMessageBox::Yes | QMessageBox::No);
|
||||
if (n == QMessageBox::Yes) {
|
||||
runOnNewThread([=]
|
||||
runOnNewThread([=,this]
|
||||
{
|
||||
DownloadAssets(!Configs::dataStore->geoip_download_url.isEmpty() ? Configs::dataStore->geoip_download_url : Configs::GeoAssets::GeoIPURLs[0],
|
||||
!Configs::dataStore->geosite_download_url.isEmpty() ? Configs::dataStore->geosite_download_url : Configs::GeoAssets::GeoSiteURLs[0]);
|
||||
@ -723,14 +723,14 @@ void MainWindow::dialog_message_impl(const QString &sender, const QString &info)
|
||||
}
|
||||
if (info.contains("DownloadAssets")) {
|
||||
auto splitted = info.split(";");
|
||||
runOnNewThread([=](){
|
||||
runOnNewThread([=,this](){
|
||||
DownloadAssets(splitted[1], splitted[2]);
|
||||
});
|
||||
}
|
||||
if (info.contains("ResetAssets"))
|
||||
{
|
||||
auto splitted = info.split(";");
|
||||
runOnNewThread([=](){
|
||||
runOnNewThread([=,this](){
|
||||
ResetAssets(splitted[1], splitted[2]);
|
||||
});
|
||||
}
|
||||
@ -807,7 +807,7 @@ inline bool dialog_is_using = false;
|
||||
if (dialog_is_using) return; \
|
||||
dialog_is_using = true; \
|
||||
auto dialog = new a(this); \
|
||||
connect(dialog, &QDialog::finished, this, [=] { \
|
||||
connect(dialog, &QDialog::finished, this, [=,this] { \
|
||||
dialog->deleteLater(); \
|
||||
dialog_is_using = false; \
|
||||
}); \
|
||||
@ -883,7 +883,7 @@ void MainWindow::prepare_exit()
|
||||
|
||||
QMutex coreKillMu;
|
||||
coreKillMu.lock();
|
||||
runOnThread([=, &coreKillMu]()
|
||||
runOnThread([=, this, &coreKillMu]()
|
||||
{
|
||||
core_process->Kill();
|
||||
coreKillMu.unlock();
|
||||
@ -951,7 +951,7 @@ bool MainWindow::get_elevated_permissions(int reason) {
|
||||
}
|
||||
auto n = QMessageBox::warning(GetMessageBoxParent(), software_name, tr("Please give the core root privileges"), QMessageBox::Yes | QMessageBox::No);
|
||||
if (n == QMessageBox::Yes) {
|
||||
runOnNewThread([=]
|
||||
runOnNewThread([=,this]
|
||||
{
|
||||
auto chownArgs = QString("root:root " + Configs::FindCoreRealPath());
|
||||
auto ret = Linux_Run_Command("chown", chownArgs);
|
||||
@ -1085,7 +1085,7 @@ void MainWindow::setupConnectionList()
|
||||
ui->connections->horizontalHeader()->setSectionResizeMode(3, QHeaderView::ResizeToContents);
|
||||
ui->connections->horizontalHeader()->setSectionResizeMode(4, QHeaderView::ResizeToContents);
|
||||
ui->connections->verticalHeader()->hide();
|
||||
connect(ui->connections, &QTableWidget::cellClicked, this, [=](int row, int column)
|
||||
connect(ui->connections, &QTableWidget::cellClicked, this, [=,this](int row, int column)
|
||||
{
|
||||
if (column > 3) return;
|
||||
auto selected = ui->connections->item(row, column);
|
||||
@ -1093,7 +1093,7 @@ void MainWindow::setupConnectionList()
|
||||
QPoint pos = ui->connections->mapToGlobal(ui->connections->visualItemRect(selected).center());
|
||||
QToolTip::showText(pos, "Copied!", this);
|
||||
auto r = ++toolTipID;
|
||||
QTimer::singleShot(1500, [=] {
|
||||
QTimer::singleShot(1500, [=,this] {
|
||||
if (r != toolTipID)
|
||||
{
|
||||
return;
|
||||
@ -1217,7 +1217,7 @@ void MainWindow::UpdateConnectionListWithRecreate(const QList<Stats::ConnectionM
|
||||
}
|
||||
|
||||
void MainWindow::refresh_status(const QString &traffic_update) {
|
||||
auto refresh_speed_label = [=] {
|
||||
auto refresh_speed_label = [=,this] {
|
||||
if (Configs::dataStore->disable_traffic_stats) {
|
||||
ui->label_speed->setText("");
|
||||
}
|
||||
@ -1267,7 +1267,7 @@ void MainWindow::refresh_status(const QString &traffic_update) {
|
||||
ui->label_running->setToolTip({});
|
||||
}
|
||||
|
||||
auto make_title = [=](bool isTray) {
|
||||
auto make_title = [=,this](bool isTray) {
|
||||
QStringList tt;
|
||||
if (!isTray && Configs::IsAdmin()) tt << "[Admin]";
|
||||
if (select_mode) tt << "[" + tr("Select") + "]";
|
||||
@ -1392,7 +1392,7 @@ void MainWindow::refresh_proxy_list_impl(const int &id, GroupSortAction groupSor
|
||||
case GroupSortMethod::ByLatency:
|
||||
case GroupSortMethod::ByType: {
|
||||
std::sort(currentGroup->profiles.begin(), currentGroup->profiles.end(),
|
||||
[=](int a, int b) {
|
||||
[=,this](int a, int b) {
|
||||
QString ms_a;
|
||||
QString ms_b;
|
||||
if (groupSortAction.method == GroupSortMethod::ByType) {
|
||||
@ -1909,7 +1909,7 @@ void MainWindow::on_menu_remove_unavailable_triggered() {
|
||||
}
|
||||
|
||||
void MainWindow::on_menu_remove_invalid_triggered() {
|
||||
runOnNewThread([=]
|
||||
runOnNewThread([=,this]
|
||||
{
|
||||
QList<std::shared_ptr<Configs::ProxyEntity>> out_del;
|
||||
|
||||
@ -1945,7 +1945,7 @@ void MainWindow::on_menu_remove_invalid_triggered() {
|
||||
}
|
||||
}
|
||||
|
||||
runOnUiThread([=]
|
||||
runOnUiThread([=,this]
|
||||
{
|
||||
if (!out_del.empty() &&
|
||||
QMessageBox::question(this, tr("Confirmation"), tr("Remove %1 Invalid item(s) ?").arg(out_del.length()) + "\n" + remove_display) == QMessageBox::StandardButton::Yes) {
|
||||
@ -1970,7 +1970,7 @@ void MainWindow::on_menu_resolve_selected_triggered() {
|
||||
Configs::dataStore->resolve_count = profiles.count();
|
||||
|
||||
for (const auto &profile: profiles) {
|
||||
profile->bean->ResolveDomainToIP([=] {
|
||||
profile->bean->ResolveDomainToIP([=,this] {
|
||||
profile->Save();
|
||||
if (--Configs::dataStore->resolve_count != 0) return;
|
||||
refresh_proxy_list();
|
||||
@ -1998,7 +1998,7 @@ void MainWindow::on_menu_resolve_domain_triggered() {
|
||||
|
||||
for (const auto id: profiles) {
|
||||
auto profile = Configs::profileManager->GetProfile(id);
|
||||
profile->bean->ResolveDomainToIP([=] {
|
||||
profile->bean->ResolveDomainToIP([=,this] {
|
||||
profile->Save();
|
||||
if (--Configs::dataStore->resolve_count != 0) return;
|
||||
refresh_proxy_list();
|
||||
@ -2094,7 +2094,7 @@ void MainWindow::on_masterLogBrowser_customContextMenuRequested(const QPoint &po
|
||||
|
||||
auto action_clear = new QAction(this);
|
||||
action_clear->setText(tr("Clear"));
|
||||
connect(action_clear, &QAction::triggered, this, [=] {
|
||||
connect(action_clear, &QAction::triggered, this, [=,this] {
|
||||
qvLogDocument->clear();
|
||||
ui->masterLogBrowser->clear();
|
||||
});
|
||||
@ -2108,7 +2108,7 @@ void MainWindow::on_tabWidget_customContextMenuRequested(const QPoint &p) {
|
||||
if (clickedIndex == -1) {
|
||||
auto* menu = new QMenu(this);
|
||||
auto* addAction = new QAction(tr("Add new Group"), this);
|
||||
connect(addAction, &QAction::triggered, this, [=]{
|
||||
connect(addAction, &QAction::triggered, this, [=,this]{
|
||||
auto ent = Configs::ProfileManager::NewGroup();
|
||||
auto dialog = new DialogEditGroup(ent, this);
|
||||
int ret = dialog->exec();
|
||||
@ -2131,7 +2131,7 @@ void MainWindow::on_tabWidget_customContextMenuRequested(const QPoint &p) {
|
||||
auto* addAction = new QAction(tr("Add new Group"), this);
|
||||
auto* deleteAction = new QAction(tr("Delete selected Group"), this);
|
||||
auto* editAction = new QAction(tr("Edit selected Group"), this);
|
||||
connect(addAction, &QAction::triggered, this, [=]{
|
||||
connect(addAction, &QAction::triggered, this, [=,this]{
|
||||
auto ent = Configs::ProfileManager::NewGroup();
|
||||
auto dialog = new DialogEditGroup(ent, this);
|
||||
int ret = dialog->exec();
|
||||
@ -2142,7 +2142,7 @@ void MainWindow::on_tabWidget_customContextMenuRequested(const QPoint &p) {
|
||||
MW_dialog_message(Dialog_DialogManageGroups, "refresh-1");
|
||||
}
|
||||
});
|
||||
connect(deleteAction, &QAction::triggered, this, [=] {
|
||||
connect(deleteAction, &QAction::triggered, this, [=,this] {
|
||||
auto id = Configs::profileManager->groupsTabOrder[clickedIndex];
|
||||
if (QMessageBox::question(this, tr("Confirmation"), tr("Remove %1?").arg(Configs::profileManager->groups[id]->name)) ==
|
||||
QMessageBox::StandardButton::Yes) {
|
||||
@ -2150,11 +2150,11 @@ void MainWindow::on_tabWidget_customContextMenuRequested(const QPoint &p) {
|
||||
MW_dialog_message(Dialog_DialogManageGroups, "refresh-1");
|
||||
}
|
||||
});
|
||||
connect(editAction, &QAction::triggered, this, [=]{
|
||||
connect(editAction, &QAction::triggered, this, [=,this]{
|
||||
auto id = Configs::profileManager->groupsTabOrder[clickedIndex];
|
||||
auto ent = Configs::profileManager->groups[id];
|
||||
auto dialog = new DialogEditGroup(ent, this);
|
||||
connect(dialog, &QDialog::finished, this, [=] {
|
||||
connect(dialog, &QDialog::finished, this, [=,this] {
|
||||
if (dialog->result() == QDialog::Accepted) {
|
||||
ent->Save();
|
||||
MW_dialog_message(Dialog_DialogManageGroups, "refresh" + Int2String(ent->id));
|
||||
@ -2252,7 +2252,7 @@ void MainWindow::RegisterHotkey(bool unregister) {
|
||||
auto hk = std::make_shared<QHotkey>(k, true);
|
||||
if (hk->isRegistered()) {
|
||||
RegisteredHotkey += hk;
|
||||
connect(hk.get(), &QHotkey::activated, this, [=] { HotkeyEvent(key); });
|
||||
connect(hk.get(), &QHotkey::activated, this, [=,this] { HotkeyEvent(key); });
|
||||
} else {
|
||||
hk->deleteLater();
|
||||
}
|
||||
@ -2261,7 +2261,7 @@ void MainWindow::RegisterHotkey(bool unregister) {
|
||||
|
||||
void MainWindow::RegisterShortcuts() {
|
||||
for (const auto &action: ui->menuHidden_menu->actions()) {
|
||||
new QShortcut(action->shortcut(), this, [=](){
|
||||
new QShortcut(action->shortcut(), this, [=,this](){
|
||||
action->trigger();
|
||||
});
|
||||
}
|
||||
@ -2269,7 +2269,7 @@ void MainWindow::RegisterShortcuts() {
|
||||
|
||||
void MainWindow::HotkeyEvent(const QString &key) {
|
||||
if (key.isEmpty()) return;
|
||||
runOnUiThread([=] {
|
||||
runOnUiThread([=,this] {
|
||||
if (key == Configs::dataStore->hotkey_mainwindow) {
|
||||
tray->activated(QSystemTrayIcon::ActivationReason::Trigger);
|
||||
} else if (key == Configs::dataStore->hotkey_group) {
|
||||
@ -2287,7 +2287,7 @@ void MainWindow::HotkeyEvent(const QString &key) {
|
||||
bool MainWindow::StopVPNProcess() {
|
||||
QMutex waitStop;
|
||||
waitStop.lock();
|
||||
runOnThread([=, &waitStop]
|
||||
runOnThread([=, this, &waitStop]
|
||||
{
|
||||
core_process->Kill();
|
||||
waitStop.unlock();
|
||||
@ -2300,7 +2300,7 @@ bool MainWindow::StopVPNProcess() {
|
||||
|
||||
void MainWindow::DownloadAssets(const QString &geoipUrl, const QString &geositeUrl) {
|
||||
if (!mu_download_assets.tryLock()) {
|
||||
runOnUiThread([=](){
|
||||
runOnUiThread([=,this](){
|
||||
MessageBoxWarning(tr("Cannot start"), tr("Last download request has not finished yet"));
|
||||
});
|
||||
return;
|
||||
@ -2323,7 +2323,7 @@ void MainWindow::DownloadAssets(const QString &geoipUrl, const QString &geositeU
|
||||
}
|
||||
mu_download_assets.unlock();
|
||||
if (!errors.isEmpty()) {
|
||||
runOnUiThread([=](){
|
||||
runOnUiThread([=,this](){
|
||||
MessageBoxWarning(tr("Failed to download geo assets"), errors);
|
||||
});
|
||||
}
|
||||
@ -2346,7 +2346,7 @@ void MainWindow::ResetAssets(const QString& geoipUrl, const QString& geositeUrl)
|
||||
}
|
||||
MW_show_log(tr("Removed all rule-set files"));
|
||||
|
||||
runOnUiThread([=]
|
||||
runOnUiThread([=,this]
|
||||
{
|
||||
if (Configs::dataStore->started_id >= 0) profile_start(Configs::dataStore->started_id);
|
||||
});
|
||||
@ -2450,7 +2450,7 @@ void MainWindow::CheckUpdate() {
|
||||
# endif
|
||||
#endif
|
||||
if (search.isEmpty()) {
|
||||
runOnUiThread([=] {
|
||||
runOnUiThread([=,this] {
|
||||
MessageBoxWarning(QObject::tr("Update"), QObject::tr("Not official support platform"));
|
||||
});
|
||||
return;
|
||||
@ -2458,7 +2458,7 @@ void MainWindow::CheckUpdate() {
|
||||
|
||||
auto resp = NetworkRequestHelper::HttpGet("https://api.github.com/repos/throneproj/Throne/releases");
|
||||
if (!resp.error.isEmpty()) {
|
||||
runOnUiThread([=] {
|
||||
runOnUiThread([=,this] {
|
||||
MessageBoxWarning(QObject::tr("Update"), QObject::tr("Requesting update error: %1").arg(resp.error + "\n" + resp.data));
|
||||
});
|
||||
return;
|
||||
@ -2484,13 +2484,13 @@ void MainWindow::CheckUpdate() {
|
||||
}
|
||||
|
||||
if (release_download_url.isEmpty() || !isNewer(assets_name)) {
|
||||
runOnUiThread([=] {
|
||||
runOnUiThread([=,this] {
|
||||
MessageBoxInfo(QObject::tr("Update"), QObject::tr("No update"));
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
runOnUiThread([=] {
|
||||
runOnUiThread([=,this] {
|
||||
auto allow_updater = !Configs::dataStore->flag_use_appdata;
|
||||
QMessageBox box(QMessageBox::Question, QObject::tr("Update") + note_pre_release,
|
||||
QObject::tr("Update found: %1\nRelease note:\n%2").arg(assets_name, release_note));
|
||||
@ -2505,9 +2505,9 @@ void MainWindow::CheckUpdate() {
|
||||
//
|
||||
if (btn1 == box.clickedButton() && allow_updater) {
|
||||
// Download Update
|
||||
runOnNewThread([=] {
|
||||
runOnNewThread([=,this] {
|
||||
if (!mu_download_update.tryLock()) {
|
||||
runOnUiThread([=](){
|
||||
runOnUiThread([=,this](){
|
||||
MessageBoxWarning(tr("Cannot start"), tr("Last download request has not finished yet"));
|
||||
});
|
||||
return;
|
||||
@ -2520,7 +2520,7 @@ void MainWindow::CheckUpdate() {
|
||||
}
|
||||
}
|
||||
mu_download_update.unlock();
|
||||
runOnUiThread([=] {
|
||||
runOnUiThread([=,this] {
|
||||
if (errors.isEmpty()) {
|
||||
auto q = QMessageBox::question(nullptr, QObject::tr("Update"),
|
||||
QObject::tr("Update is ready, restart to install?"));
|
||||
|
||||
@ -46,7 +46,7 @@ void MainWindow::runURLTest(const QString& config, bool useDefault, const QStrin
|
||||
|
||||
auto done = new QMutex;
|
||||
done->lock();
|
||||
runOnNewThread([=]
|
||||
runOnNewThread([=,this]
|
||||
{
|
||||
bool ok;
|
||||
while (true)
|
||||
@ -88,7 +88,7 @@ void MainWindow::runURLTest(const QString& config, bool useDefault, const QStrin
|
||||
}
|
||||
if (needRefresh)
|
||||
{
|
||||
runOnUiThread([=]{
|
||||
runOnUiThread([=,this]{
|
||||
refresh_proxy_list();
|
||||
});
|
||||
}
|
||||
@ -177,7 +177,7 @@ void MainWindow::urltest_current_group(const QList<std::shared_ptr<Configs::Prox
|
||||
|
||||
speedtestRunning.lock();
|
||||
speedtestRunning.unlock();
|
||||
runOnUiThread([=]{
|
||||
runOnUiThread([=,this]{
|
||||
refresh_proxy_list();
|
||||
MW_show_log(tr("URL test finished!"));
|
||||
});
|
||||
@ -198,7 +198,7 @@ void MainWindow::url_test_current() {
|
||||
last_test_time = QTime::currentTime();
|
||||
ui->label_running->setText(tr("Testing"));
|
||||
|
||||
runOnNewThread([=] {
|
||||
runOnNewThread([=,this] {
|
||||
libcore::TestReq req;
|
||||
req.test_current = true;
|
||||
req.url = Configs::dataStore->test_latency_url.toStdString();
|
||||
@ -210,7 +210,7 @@ void MainWindow::url_test_current() {
|
||||
auto latency = result.results[0].latency_ms.value();
|
||||
last_test_time = QTime::currentTime();
|
||||
|
||||
runOnUiThread([=] {
|
||||
runOnUiThread([=,this] {
|
||||
if (!result.results[0].error.value().empty()) {
|
||||
MW_show_log(QString("UrlTest error: %1").arg(QString::fromStdString(result.results[0].error.value())));
|
||||
}
|
||||
@ -259,7 +259,7 @@ void MainWindow::speedtest_current_group(const QList<std::shared_ptr<Configs::Pr
|
||||
}
|
||||
|
||||
speedtestRunning.unlock();
|
||||
runOnUiThread([=]{
|
||||
runOnUiThread([=,this]{
|
||||
refresh_proxy_list();
|
||||
MW_show_log(tr("Speedtest finished!"));
|
||||
});
|
||||
@ -289,7 +289,7 @@ void MainWindow::runSpeedTest(const QString& config, bool useDefault, bool testC
|
||||
// loop query result
|
||||
auto doneMu = new QMutex;
|
||||
doneMu->lock();
|
||||
runOnNewThread([=]
|
||||
runOnNewThread([=,this]
|
||||
{
|
||||
QDateTime lastProxyListUpdate = QDateTime::currentDateTime();
|
||||
bool ok;
|
||||
@ -309,7 +309,7 @@ void MainWindow::runSpeedTest(const QString& config, bool useDefault, bool testC
|
||||
{
|
||||
continue;
|
||||
}
|
||||
runOnUiThread([=, &lastProxyListUpdate]
|
||||
runOnUiThread([=, this, &lastProxyListUpdate]
|
||||
{
|
||||
showSpeedtestData = true;
|
||||
currentSptProfileName = profile->bean->name;
|
||||
@ -326,7 +326,7 @@ void MainWindow::runSpeedTest(const QString& config, bool useDefault, bool testC
|
||||
}
|
||||
});
|
||||
}
|
||||
runOnUiThread([=]
|
||||
runOnUiThread([=, this]
|
||||
{
|
||||
showSpeedtestData = false;
|
||||
UpdateDataView(true);
|
||||
@ -426,7 +426,7 @@ void MainWindow::profile_start(int _id) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto profile_start_stage2 = [=] {
|
||||
auto profile_start_stage2 = [=, this] {
|
||||
libcore::LoadConfigReq req;
|
||||
req.core_config = QJsonObject2QString(result->coreConfig, true).toStdString();
|
||||
req.disable_stats = Configs::dataStore->disable_traffic_stats;
|
||||
@ -447,7 +447,7 @@ void MainWindow::profile_start(int _id) {
|
||||
}
|
||||
if (!error.isEmpty()) {
|
||||
if (error.contains("configure tun interface")) {
|
||||
runOnUiThread([=] {
|
||||
runOnUiThread([=, this] {
|
||||
|
||||
QMessageBox msg(
|
||||
QMessageBox::Information,
|
||||
@ -469,7 +469,7 @@ void MainWindow::profile_start(int _id) {
|
||||
});
|
||||
return false;
|
||||
}
|
||||
runOnUiThread([=] { MessageBoxWarning("LoadConfig return error", error); });
|
||||
runOnUiThread([=,this] { MessageBoxWarning("LoadConfig return error", error); });
|
||||
return false;
|
||||
}
|
||||
//
|
||||
@ -483,7 +483,7 @@ void MainWindow::profile_start(int _id) {
|
||||
Configs::dataStore->UpdateStartedId(ent->id);
|
||||
running = ent;
|
||||
|
||||
runOnUiThread([=] {
|
||||
runOnUiThread([=, this] {
|
||||
refresh_status();
|
||||
refresh_proxy_list(ent->id);
|
||||
});
|
||||
@ -505,7 +505,7 @@ void MainWindow::profile_start(int _id) {
|
||||
// check core state
|
||||
if (!Configs::dataStore->core_running) {
|
||||
runOnThread(
|
||||
[=] {
|
||||
[=, this] {
|
||||
MW_show_log(tr("Try to start the config, but the core has not listened to the grpc port, so restart it..."));
|
||||
core_process->start_profile_when_core_is_up = ent->id;
|
||||
core_process->Restart();
|
||||
@ -518,13 +518,13 @@ void MainWindow::profile_start(int _id) {
|
||||
// timeout message
|
||||
auto restartMsgbox = new QMessageBox(QMessageBox::Question, software_name, tr("If there is no response for a long time, it is recommended to restart the software."),
|
||||
QMessageBox::Yes | QMessageBox::No, this);
|
||||
connect(restartMsgbox, &QMessageBox::accepted, this, [=] { MW_dialog_message("", "RestartProgram"); });
|
||||
connect(restartMsgbox, &QMessageBox::accepted, this, [=,this] { MW_dialog_message("", "RestartProgram"); });
|
||||
auto restartMsgboxTimer = new MessageBoxTimer(this, restartMsgbox, 5000);
|
||||
|
||||
runOnNewThread([=] {
|
||||
runOnNewThread([=, this] {
|
||||
// stop current running
|
||||
if (running != nullptr) {
|
||||
runOnUiThread([=] { profile_stop(false, true, true); });
|
||||
runOnUiThread([=,this] { profile_stop(false, true, true); });
|
||||
sem_stopped.acquire();
|
||||
}
|
||||
// do start
|
||||
@ -534,7 +534,7 @@ void MainWindow::profile_start(int _id) {
|
||||
}
|
||||
mu_starting.unlock();
|
||||
// cancel timeout
|
||||
runOnUiThread([=] {
|
||||
runOnUiThread([=,this] {
|
||||
restartMsgboxTimer->cancel();
|
||||
restartMsgboxTimer->deleteLater();
|
||||
restartMsgbox->deleteLater();
|
||||
@ -571,12 +571,12 @@ void MainWindow::profile_stop(bool crash, bool sem, bool manual) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto profile_stop_stage2 = [=] {
|
||||
auto profile_stop_stage2 = [=,this] {
|
||||
if (!crash) {
|
||||
bool rpcOK;
|
||||
QString error = defaultClient->Stop(&rpcOK);
|
||||
if (rpcOK && !error.isEmpty()) {
|
||||
runOnUiThread([=] { MessageBoxWarning(tr("Stop return error"), error); });
|
||||
runOnUiThread([=,this] { MessageBoxWarning(tr("Stop return error"), error); });
|
||||
return false;
|
||||
} else if (!rpcOK) {
|
||||
return false;
|
||||
@ -593,7 +593,7 @@ void MainWindow::profile_stop(bool crash, bool sem, bool manual) {
|
||||
// timeout message
|
||||
auto restartMsgbox = new QMessageBox(QMessageBox::Question, software_name, tr("If there is no response for a long time, it is recommended to restart the software."),
|
||||
QMessageBox::Yes | QMessageBox::No, this);
|
||||
connect(restartMsgbox, &QMessageBox::accepted, this, [=] { MW_dialog_message("", "RestartProgram"); });
|
||||
connect(restartMsgbox, &QMessageBox::accepted, this, [=,this] { MW_dialog_message("", "RestartProgram"); });
|
||||
auto restartMsgboxTimer = new MessageBoxTimer(this, restartMsgbox, 5000);
|
||||
|
||||
Stats::trafficLooper->loop_enabled = false;
|
||||
@ -612,7 +612,7 @@ void MainWindow::profile_stop(bool crash, bool sem, bool manual) {
|
||||
restartMsgboxTimer->deleteLater();
|
||||
restartMsgbox->deleteLater();
|
||||
|
||||
runOnNewThread([=] {
|
||||
runOnNewThread([=, this] {
|
||||
// do stop
|
||||
MW_show_log(">>>>>>>> " + tr("Stopping profile %1").arg(running->bean->DisplayTypeAndName()));
|
||||
if (!profile_stop_stage2()) {
|
||||
@ -625,7 +625,7 @@ void MainWindow::profile_stop(bool crash, bool sem, bool manual) {
|
||||
|
||||
if (sem) sem_stopped.release();
|
||||
|
||||
runOnUiThread([=] {
|
||||
runOnUiThread([=, this] {
|
||||
refresh_status();
|
||||
refresh_proxy_list_impl_refresh_data(id, true);
|
||||
|
||||
|
||||
@ -26,7 +26,7 @@ void ProxyItem::refresh_data() {
|
||||
ui->test_result->setText(ent->DisplayTestResult());
|
||||
|
||||
runOnThread(
|
||||
[=] {
|
||||
[=,this] {
|
||||
adjustSize();
|
||||
item->setSizeHint(sizeHint());
|
||||
dynamic_cast<QWidget *>(parent())->adjustSize();
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
#include <QInputDialog>
|
||||
#include <QToolTip>
|
||||
|
||||
#define ADJUST_SIZE runOnThread([=] { adjustSize(); adjustPosition(mainwindow); }, this);
|
||||
#define ADJUST_SIZE runOnThread([=,this] { adjustSize(); adjustPosition(mainwindow); }, this);
|
||||
#define LOAD_TYPE(a) ui->type->addItem(Configs::ProfileManager::NewProxyEntity(a)->bean->DisplayType(), a);
|
||||
|
||||
DialogEditProfile::DialogEditProfile(const QString &_type, int profileOrGroupId, QWidget *parent)
|
||||
@ -31,7 +31,7 @@ DialogEditProfile::DialogEditProfile(const QString &_type, int profileOrGroupId,
|
||||
|
||||
// network changed
|
||||
network_title_base = ui->network_box->title();
|
||||
connect(ui->network, &QComboBox::currentTextChanged, this, [=](const QString &txt) {
|
||||
connect(ui->network, &QComboBox::currentTextChanged, this, [=,this](const QString &txt) {
|
||||
ui->network_box->setTitle(network_title_base.arg(txt));
|
||||
if (txt == "tcp") {
|
||||
ui->header_type->setVisible(true);
|
||||
@ -111,7 +111,7 @@ DialogEditProfile::DialogEditProfile(const QString &_type, int profileOrGroupId,
|
||||
ui->network->removeItem(0);
|
||||
|
||||
// security changed
|
||||
connect(ui->security, &QComboBox::currentTextChanged, this, [=](const QString &txt) {
|
||||
connect(ui->security, &QComboBox::currentTextChanged, this, [=,this](const QString &txt) {
|
||||
if (txt == "tls") {
|
||||
ui->security_box->setVisible(true);
|
||||
ui->tls_camouflage_box->setVisible(true);
|
||||
@ -135,13 +135,13 @@ DialogEditProfile::DialogEditProfile(const QString &_type, int profileOrGroupId,
|
||||
emit ui->security->currentTextChanged(ui->security->currentText());
|
||||
|
||||
// for fragment
|
||||
connect(ui->tls_frag, &QCheckBox::checkStateChanged, this, [=](bool state)
|
||||
connect(ui->tls_frag, &QCheckBox::checkStateChanged, this, [=,this](bool state)
|
||||
{
|
||||
ui->tls_frag_fall_delay->setEnabled(state);
|
||||
});
|
||||
|
||||
// mux setting changed
|
||||
connect(ui->multiplex, &QComboBox::currentTextChanged, this, [=](const QString &txt) {
|
||||
connect(ui->multiplex, &QComboBox::currentTextChanged, this, [=,this](const QString &txt) {
|
||||
if (txt == "Off") {
|
||||
ui->brutal_enable->setCheckState(Qt::CheckState::Unchecked);
|
||||
ui->brutal_box->setEnabled(false);
|
||||
@ -174,7 +174,7 @@ DialogEditProfile::DialogEditProfile(const QString &_type, int profileOrGroupId,
|
||||
LOAD_TYPE("chain")
|
||||
|
||||
// type changed
|
||||
connect(ui->type, &QComboBox::currentIndexChanged, this, [=](int index) {
|
||||
connect(ui->type, &QComboBox::currentIndexChanged, this, [=,this](int index) {
|
||||
typeSelected(ui->type->itemData(index).toString());
|
||||
});
|
||||
|
||||
@ -219,7 +219,7 @@ void DialogEditProfile::typeSelected(const QString &newType) {
|
||||
auto _innerWidget = new EditTrojanVLESS(this);
|
||||
innerWidget = _innerWidget;
|
||||
innerEditor = _innerWidget;
|
||||
connect(_innerWidget->flow_, &QComboBox::currentTextChanged, _innerWidget, [=](const QString &txt)
|
||||
connect(_innerWidget->flow_, &QComboBox::currentTextChanged, _innerWidget, [=,this](const QString &txt)
|
||||
{
|
||||
if (txt == "xtls-rprx-vision")
|
||||
{
|
||||
@ -347,7 +347,7 @@ void DialogEditProfile::typeSelected(const QString &newType) {
|
||||
innerEditor->get_edit_text_name = [&]() { return ui->name->text(); };
|
||||
innerEditor->get_edit_text_serverAddress = [&]() { return ui->address->text(); };
|
||||
innerEditor->get_edit_text_serverPort = [&]() { return ui->port->text(); };
|
||||
innerEditor->editor_cache_updated = [=] { editor_cache_updated_impl(); };
|
||||
innerEditor->editor_cache_updated = [=,this] { editor_cache_updated_impl(); };
|
||||
innerEditor->onStart(ent);
|
||||
|
||||
// 左边 common
|
||||
@ -407,7 +407,7 @@ void DialogEditProfile::typeSelected(const QString &newType) {
|
||||
|
||||
// 第一次显示
|
||||
if (isHidden()) {
|
||||
runOnThread([=] { show(); }, this);
|
||||
runOnThread([=,this] { show(); }, this);
|
||||
}
|
||||
}
|
||||
|
||||
@ -576,7 +576,7 @@ void DialogEditProfile::on_apply_to_group_clicked() {
|
||||
void DialogEditProfile::do_apply_to_group(const std::shared_ptr<Configs::Group> &group, QWidget *key) {
|
||||
auto stream = GetStreamSettings(ent->bean.get());
|
||||
|
||||
auto copyStream = [=](void *p) {
|
||||
auto copyStream = [=,this](void *p) {
|
||||
for (const auto &profile: group->GetProfileEnts()) {
|
||||
auto newStream = GetStreamSettings(profile->bean.get());
|
||||
if (newStream == nullptr) continue;
|
||||
@ -587,7 +587,7 @@ void DialogEditProfile::do_apply_to_group(const std::shared_ptr<Configs::Group>
|
||||
}
|
||||
};
|
||||
|
||||
auto copyBean = [=](void *p) {
|
||||
auto copyBean = [=,this](void *p) {
|
||||
for (const auto &profile: group->GetProfileEnts()) {
|
||||
if (profile == ent) continue;
|
||||
profile->bean->_setValue(ent->bean->_name(p), p);
|
||||
|
||||
@ -42,7 +42,7 @@ bool EditChain::onEnd() {
|
||||
|
||||
void EditChain::on_select_profile_clicked() {
|
||||
get_edit_dialog()->hide();
|
||||
GetMainWindow()->start_select_mode(this, [=](int id) {
|
||||
GetMainWindow()->start_select_mode(this, [=,this](int id) {
|
||||
get_edit_dialog()->show();
|
||||
AddProfileToListIfExist(id);
|
||||
});
|
||||
@ -57,9 +57,9 @@ void EditChain::AddProfileToListIfExist(int profileId) {
|
||||
ui->listWidget->addItem(wI);
|
||||
ui->listWidget->setItemWidget(wI, w);
|
||||
// change button
|
||||
connect(w->get_change_button(), &QPushButton::clicked, w, [=] {
|
||||
connect(w->get_change_button(), &QPushButton::clicked, w, [=,this] {
|
||||
get_edit_dialog()->hide();
|
||||
GetMainWindow()->start_select_mode(w, [=](int newId) {
|
||||
GetMainWindow()->start_select_mode(w, [=,this](int newId) {
|
||||
get_edit_dialog()->show();
|
||||
ReplaceProfile(w, newId);
|
||||
});
|
||||
|
||||
@ -27,7 +27,7 @@ void EditExtraCore::onStart(std::shared_ptr<Configs::ProxyEntity> _ent) {
|
||||
ui->path_combo->addItems(Configs::profileManager->GetExtraCorePaths());
|
||||
ui->path_combo->setCurrentText(bean->extraCorePath);
|
||||
|
||||
connect(ui->path_button, &QPushButton::pressed, this, [=]
|
||||
connect(ui->path_button, &QPushButton::pressed, this, [=,this]
|
||||
{
|
||||
auto f = QFileDialog::getOpenFileName();
|
||||
if (f.isEmpty())
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
|
||||
EditQUIC::EditQUIC(QWidget *parent) : QWidget(parent), ui(new Ui::EditQUIC) {
|
||||
ui->setupUi(this);
|
||||
connect(ui->uuidgen, &QPushButton::clicked, this, [=] { ui->uuid->setText(QUuid::createUuid().toString().remove("{").remove("}")); });
|
||||
connect(ui->uuidgen, &QPushButton::clicked, this, [=,this] { ui->uuid->setText(QUuid::createUuid().toString().remove("{").remove("}")); });
|
||||
}
|
||||
|
||||
EditQUIC::~EditQUIC() {
|
||||
|
||||
@ -24,7 +24,7 @@ void EditSSH::onStart(std::shared_ptr<Configs::ProxyEntity> _ent) {
|
||||
ui->host_key_algs->setText(bean->hostKeyAlgs.join(","));
|
||||
ui->client_version->setText(bean->clientVersion);
|
||||
|
||||
connect(ui->choose_pk, &QPushButton::clicked, this, [=] {
|
||||
connect(ui->choose_pk, &QPushButton::clicked, this, [=,this] {
|
||||
auto fn = QFileDialog::getOpenFileName(this, QObject::tr("Select"), QDir::currentPath(),
|
||||
"", nullptr, QFileDialog::Option::ReadOnly);
|
||||
if (!fn.isEmpty()) {
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
EditVMess::EditVMess(QWidget *parent) : QWidget(parent), ui(new Ui::EditVMess) {
|
||||
ui->setupUi(this);
|
||||
connect(ui->uuidgen, &QPushButton::clicked, this, [=] { ui->uuid->setText(QUuid::createUuid().toString().remove("{").remove("}")); });
|
||||
connect(ui->uuidgen, &QPushButton::clicked, this, [=,this] { ui->uuid->setText(QUuid::createUuid().toString().remove("{").remove("}")); });
|
||||
}
|
||||
|
||||
EditVMess::~EditVMess() {
|
||||
|
||||
@ -72,7 +72,7 @@ RouteItem::RouteItem(QWidget *parent, const std::shared_ptr<Configs::RoutingChai
|
||||
ui->rule_attr_data->layout()->addWidget(rule_set_editor);
|
||||
ui->rule_attr_data->adjustSize();
|
||||
rule_set_editor->hide();
|
||||
connect(rule_set_editor, &QPlainTextEdit::textChanged, this, [=]{
|
||||
connect(rule_set_editor, &QPlainTextEdit::textChanged, this, [=,this]{
|
||||
if (currentIndex == -1) return;
|
||||
auto currentVal = rule_set_editor->toPlainText().split('\n');
|
||||
chain->Rules[currentIndex]->set_field_value(ui->rule_attr->currentText(), currentVal);
|
||||
@ -145,7 +145,7 @@ RouteItem::RouteItem(QWidget *parent, const std::shared_ptr<Configs::RoutingChai
|
||||
simpleBlock->setPlainText(chain->GetSimpleRules(Configs::block));
|
||||
simpleProxy->setPlainText(chain->GetSimpleRules(Configs::proxy));
|
||||
|
||||
connect(ui->tabWidget->tabBar(), &QTabBar::currentChanged, this, [=]()
|
||||
connect(ui->tabWidget->tabBar(), &QTabBar::currentChanged, this, [=,this]()
|
||||
{
|
||||
if (ui->tabWidget->tabBar()->currentIndex() == 1)
|
||||
{
|
||||
@ -155,7 +155,7 @@ RouteItem::RouteItem(QWidget *parent, const std::shared_ptr<Configs::RoutingChai
|
||||
res += chain->UpdateSimpleRules(simpleProxy->toPlainText(), Configs::proxy);
|
||||
if (!res.isEmpty())
|
||||
{
|
||||
runOnUiThread([=]
|
||||
runOnUiThread([=,this]
|
||||
{
|
||||
MessageBoxWarning(tr("Invalid rules"), tr("Some rules could not be added:\n") + res);
|
||||
});
|
||||
@ -174,15 +174,15 @@ RouteItem::RouteItem(QWidget *parent, const std::shared_ptr<Configs::RoutingChai
|
||||
}
|
||||
});
|
||||
|
||||
connect(ui->howtouse_button, &QPushButton::clicked, this, [=]()
|
||||
connect(ui->howtouse_button, &QPushButton::clicked, this, [=,this]()
|
||||
{
|
||||
runOnUiThread([=]
|
||||
runOnUiThread([=,this]
|
||||
{
|
||||
MessageBoxInfo(tr("Simple rule manual"), Configs::Information::SimpleRuleInfo);
|
||||
});
|
||||
});
|
||||
|
||||
connect(ui->route_import_json, &QPushButton::clicked, this, [=] {
|
||||
connect(ui->route_import_json, &QPushButton::clicked, this, [=,this] {
|
||||
auto w = new QDialog(this);
|
||||
w->setWindowTitle("Import JSON Array");
|
||||
w->setWindowModality(Qt::ApplicationModal);
|
||||
@ -209,7 +209,7 @@ RouteItem::RouteItem(QWidget *parent, const std::shared_ptr<Configs::RoutingChai
|
||||
buttons->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
||||
layout->addWidget(buttons, line, 0);
|
||||
|
||||
connect(buttons, &QDialogButtonBox::accepted, w, [=]{
|
||||
connect(buttons, &QDialogButtonBox::accepted, w, [=,this]{
|
||||
auto err = new QString;
|
||||
auto parsed = Configs::RoutingChain::parseJsonArray(QString2QJsonArray(tEdit->toPlainText()), err);
|
||||
if (!err->isEmpty()) {
|
||||
@ -229,13 +229,13 @@ RouteItem::RouteItem(QWidget *parent, const std::shared_ptr<Configs::RoutingChai
|
||||
w->deleteLater();
|
||||
});
|
||||
|
||||
connect(ui->rule_name, &QLineEdit::textChanged, this, [=](const QString& text) {
|
||||
connect(ui->rule_name, &QLineEdit::textChanged, this, [=,this](const QString& text) {
|
||||
if (currentIndex == -1) return;
|
||||
chain->Rules[currentIndex]->name = QString(text);
|
||||
updateRouteItemsView();
|
||||
});
|
||||
|
||||
connect(ui->rule_attr_selector, &QComboBox::currentTextChanged, this, [=](const QString& text){
|
||||
connect(ui->rule_attr_selector, &QComboBox::currentTextChanged, this, [=,this](const QString& text){
|
||||
if (currentIndex == -1) return;
|
||||
if (ui->rule_attr->currentText() == "outbound")
|
||||
{
|
||||
@ -247,33 +247,33 @@ RouteItem::RouteItem(QWidget *parent, const std::shared_ptr<Configs::RoutingChai
|
||||
updateRulePreview();
|
||||
});
|
||||
|
||||
connect(ui->rule_attr_text, &QPlainTextEdit::textChanged, this, [=] {
|
||||
connect(ui->rule_attr_text, &QPlainTextEdit::textChanged, this, [=,this] {
|
||||
if (currentIndex == -1) return;
|
||||
auto currentVal = ui->rule_attr_text->toPlainText().split('\n');
|
||||
chain->Rules[currentIndex]->set_field_value(ui->rule_attr->currentText(), currentVal);
|
||||
updateRulePreview();
|
||||
});
|
||||
|
||||
connect(ui->route_items, &QListWidget::currentRowChanged, this, [=](const int idx) {
|
||||
connect(ui->route_items, &QListWidget::currentRowChanged, this, [=,this](const int idx) {
|
||||
if (idx == -1) return;
|
||||
currentIndex = idx;
|
||||
updateRuleSection();
|
||||
});
|
||||
|
||||
connect(ui->rule_attr, &QComboBox::currentTextChanged, this, [=](const QString& text){
|
||||
connect(ui->rule_attr, &QComboBox::currentTextChanged, this, [=,this](const QString& text){
|
||||
updateRuleSection();
|
||||
});
|
||||
|
||||
connect(ui->buttonBox, &QDialogButtonBox::accepted, this, [=]{
|
||||
connect(ui->buttonBox, &QDialogButtonBox::accepted, this, [=,this]{
|
||||
accept();
|
||||
});
|
||||
connect(ui->buttonBox, &QDialogButtonBox::rejected, this, [=]{
|
||||
connect(ui->buttonBox, &QDialogButtonBox::rejected, this, [=,this]{
|
||||
QDialog::reject();
|
||||
});
|
||||
|
||||
deleteShortcut = new QShortcut(QKeySequence(Qt::Key_Delete), this);
|
||||
|
||||
connect(deleteShortcut, &QShortcut::activated, this, [=]{
|
||||
connect(deleteShortcut, &QShortcut::activated, this, [=,this]{
|
||||
on_delete_route_item_clicked();
|
||||
});
|
||||
|
||||
@ -314,7 +314,7 @@ void RouteItem::accept() {
|
||||
res += chain->UpdateSimpleRules(simpleProxy->toPlainText(), Configs::proxy);
|
||||
if (!res.isEmpty())
|
||||
{
|
||||
runOnUiThread([=]
|
||||
runOnUiThread([=,this]
|
||||
{
|
||||
MessageBoxWarning(tr("Invalid rules"), tr("Some rules could not be added, fix them before saving:\n") + res);
|
||||
});
|
||||
|
||||
@ -38,13 +38,13 @@ DialogBasicSettings::DialogBasicSettings(QWidget *parent)
|
||||
ui->speedtest_mode->setCurrentIndex(Configs::dataStore->speed_test_mode);
|
||||
ui->simple_down_url->setText(Configs::dataStore->simple_dl_url);
|
||||
|
||||
connect(ui->custom_inbound_edit, &QPushButton::clicked, this, [=] {
|
||||
connect(ui->custom_inbound_edit, &QPushButton::clicked, this, [=,this] {
|
||||
C_EDIT_JSON_ALLOW_EMPTY(custom_inbound)
|
||||
});
|
||||
connect(ui->disable_tray, &QCheckBox::stateChanged, this, [=](const bool &) {
|
||||
connect(ui->disable_tray, &QCheckBox::stateChanged, this, [=,this](const bool &) {
|
||||
CACHE.updateDisableTray = true;
|
||||
});
|
||||
connect(ui->random_listen_port, &QCheckBox::stateChanged, this, [=](const bool &state)
|
||||
connect(ui->random_listen_port, &QCheckBox::stateChanged, this, [=,this](const bool &state)
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
@ -67,10 +67,10 @@ DialogBasicSettings::DialogBasicSettings(QWidget *parent)
|
||||
D_LOAD_INT(max_log_line)
|
||||
//
|
||||
ui->language->setCurrentIndex(Configs::dataStore->language);
|
||||
connect(ui->language, &QComboBox::currentIndexChanged, this, [=](int index) {
|
||||
connect(ui->language, &QComboBox::currentIndexChanged, this, [=,this](int index) {
|
||||
CACHE.needRestart = true;
|
||||
});
|
||||
connect(ui->font, &QComboBox::currentTextChanged, this, [=](const QString &fontName) {
|
||||
connect(ui->font, &QComboBox::currentTextChanged, this, [=,this](const QString &fontName) {
|
||||
auto font = qApp->font();
|
||||
font.setFamily(fontName);
|
||||
qApp->setFont(font);
|
||||
@ -82,7 +82,7 @@ DialogBasicSettings::DialogBasicSettings(QWidget *parent)
|
||||
ui->font_size->addItem(Int2String(i));
|
||||
}
|
||||
ui->font_size->setCurrentText(Int2String(qApp->font().pointSize()));
|
||||
connect(ui->font_size, &QComboBox::currentTextChanged, this, [=](const QString &sizeStr) {
|
||||
connect(ui->font_size, &QComboBox::currentTextChanged, this, [=,this](const QString &sizeStr) {
|
||||
auto font = qApp->font();
|
||||
font.setPointSize(sizeStr.toInt());
|
||||
qApp->setFont(font);
|
||||
@ -102,7 +102,7 @@ DialogBasicSettings::DialogBasicSettings(QWidget *parent)
|
||||
ui->theme->setCurrentText(Configs::dataStore->theme);
|
||||
}
|
||||
//
|
||||
connect(ui->theme, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, [=](int index) {
|
||||
connect(ui->theme, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, [=,this](int index) {
|
||||
themeManager->ApplyTheme(ui->theme->currentText());
|
||||
Configs::dataStore->theme = ui->theme->currentText();
|
||||
Configs::dataStore->Save();
|
||||
@ -129,10 +129,10 @@ DialogBasicSettings::DialogBasicSettings(QWidget *parent)
|
||||
ui->geosite_url->setCurrentText(Configs::dataStore->geosite_download_url);
|
||||
ui->auto_reset->setCurrentIndex(Configs::dataStore->auto_reset_assets_idx);
|
||||
|
||||
connect(ui->download_geo_btn, &QPushButton::clicked, this, [=]() {
|
||||
connect(ui->download_geo_btn, &QPushButton::clicked, this, [=,this]() {
|
||||
MW_dialog_message(Dialog_DialogBasicSettings, "DownloadAssets;"+ui->geoip_url->currentText()+";"+ui->geosite_url->currentText());
|
||||
});
|
||||
connect(ui->remove_srs_btn, &QPushButton::clicked, this, [=](){
|
||||
connect(ui->remove_srs_btn, &QPushButton::clicked, this, [=,this](){
|
||||
auto rsDir = QDir(RULE_SETS_DIR);
|
||||
auto entries = rsDir.entryList(QDir::Files);
|
||||
for (const auto &item: entries) {
|
||||
@ -142,7 +142,7 @@ DialogBasicSettings::DialogBasicSettings(QWidget *parent)
|
||||
}
|
||||
MW_show_log(tr("Removed all rule-set files"));
|
||||
});
|
||||
connect(ui->reset_assets, &QPushButton::clicked, this, [=]()
|
||||
connect(ui->reset_assets, &QPushButton::clicked, this, [=,this]()
|
||||
{
|
||||
MW_dialog_message(Dialog_DialogBasicSettings, "ResetAssets;"+ui->geoip_url->currentText()+";"+ui->geosite_url->currentText());
|
||||
});
|
||||
@ -161,7 +161,7 @@ DialogBasicSettings::DialogBasicSettings(QWidget *parent)
|
||||
ui->ntp_server->setText(Configs::dataStore->ntp_server_address);
|
||||
ui->ntp_port->setText(Int2String(Configs::dataStore->ntp_server_port));
|
||||
ui->ntp_interval->setCurrentText(Configs::dataStore->ntp_interval);
|
||||
connect(ui->ntp_enable, &QCheckBox::stateChanged, this, [=](const bool &state) {
|
||||
connect(ui->ntp_enable, &QCheckBox::stateChanged, this, [=,this](const bool &state) {
|
||||
ui->ntp_server->setEnabled(state);
|
||||
ui->ntp_port->setEnabled(state);
|
||||
ui->ntp_interval->setEnabled(state);
|
||||
@ -172,6 +172,7 @@ DialogBasicSettings::DialogBasicSettings(QWidget *parent)
|
||||
ui->utlsFingerprint->addItems(Preset::SingBox::UtlsFingerPrint);
|
||||
ui->disable_priv_req->setChecked(Configs::dataStore->disable_privilege_req);
|
||||
ui->windows_no_admin->setChecked(Configs::dataStore->disable_run_admin);
|
||||
ui->mozilla_cert->setChecked(Configs::dataStore->use_mozilla_certs);
|
||||
|
||||
D_LOAD_BOOL(skip_cert)
|
||||
ui->utlsFingerprint->setCurrentText(Configs::dataStore->utlsFingerprint);
|
||||
@ -252,6 +253,7 @@ void DialogBasicSettings::accept() {
|
||||
Configs::dataStore->utlsFingerprint = ui->utlsFingerprint->currentText();
|
||||
Configs::dataStore->disable_privilege_req = ui->disable_priv_req->isChecked();
|
||||
Configs::dataStore->disable_run_admin = ui->windows_no_admin->isChecked();
|
||||
Configs::dataStore->use_mozilla_certs = ui->mozilla_cert->isChecked();
|
||||
|
||||
QStringList str{"UpdateDataStore"};
|
||||
if (CACHE.needRestart) str << "NeedRestart";
|
||||
@ -304,7 +306,7 @@ void DialogBasicSettings::on_core_settings_clicked() {
|
||||
auto box = new QDialogButtonBox;
|
||||
box->setOrientation(Qt::Horizontal);
|
||||
box->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
|
||||
connect(box, &QDialogButtonBox::accepted, w, [=] {
|
||||
connect(box, &QDialogButtonBox::accepted, w, [=,this] {
|
||||
Configs::dataStore->core_box_underlying_dns = core_box_underlying_dns->text();
|
||||
Configs::dataStore->core_box_clash_api = core_box_clash_api->text().toInt();
|
||||
Configs::dataStore->core_box_clash_listen_addr = core_box_clash_listen_addr->text();
|
||||
|
||||
@ -86,16 +86,16 @@ DialogManageRoutes::DialogManageRoutes(QWidget *parent) : QDialog(parent), ui(ne
|
||||
ui->remote_dns_strategy->addItems(qsValue);
|
||||
ui->enable_fakeip->setChecked(Configs::dataStore->fake_dns);
|
||||
//
|
||||
connect(ui->use_dns_object, &QCheckBox::stateChanged, this, [=](int state) {
|
||||
connect(ui->use_dns_object, &QCheckBox::stateChanged, this, [=,this](int state) {
|
||||
auto useDNSObject = state == Qt::Checked;
|
||||
ui->simple_dns_box->setDisabled(useDNSObject);
|
||||
ui->dns_object->setDisabled(!useDNSObject);
|
||||
});
|
||||
ui->use_dns_object->stateChanged(Qt::Unchecked); // uncheck to uncheck
|
||||
connect(ui->dns_document, &QPushButton::clicked, this, [=] {
|
||||
connect(ui->dns_document, &QPushButton::clicked, this, [=,this] {
|
||||
MessageBoxInfo("DNS", dnsHelpDocumentUrl);
|
||||
});
|
||||
connect(ui->format_dns_object, &QPushButton::clicked, this, [=] {
|
||||
connect(ui->format_dns_object, &QPushButton::clicked, this, [=,this] {
|
||||
auto obj = QString2QJsonObject(ui->dns_object->toPlainText());
|
||||
if (obj.isEmpty()) {
|
||||
MessageBoxInfo("DNS", "invaild json");
|
||||
@ -115,7 +115,7 @@ DialogManageRoutes::DialogManageRoutes(QWidget *parent) : QDialog(parent), ui(ne
|
||||
ui->dns_final_out->setCurrentText(Configs::dataStore->routing->dns_final_out);
|
||||
reloadProfileItems();
|
||||
|
||||
connect(ui->route_profiles, &QListWidget::itemDoubleClicked, this, [=](const QListWidgetItem* item){
|
||||
connect(ui->route_profiles, &QListWidget::itemDoubleClicked, this, [=,this](const QListWidgetItem* item){
|
||||
on_edit_route_clicked();
|
||||
});
|
||||
|
||||
@ -123,7 +123,7 @@ DialogManageRoutes::DialogManageRoutes(QWidget *parent) : QDialog(parent), ui(ne
|
||||
|
||||
deleteShortcut = new QShortcut(QKeySequence(Qt::Key_Delete), this);
|
||||
|
||||
connect(deleteShortcut, &QShortcut::activated, this, [=]{
|
||||
connect(deleteShortcut, &QShortcut::activated, this, [=,this]{
|
||||
on_delete_route_clicked();
|
||||
});
|
||||
|
||||
@ -135,7 +135,7 @@ DialogManageRoutes::DialogManageRoutes(QWidget *parent) : QDialog(parent), ui(ne
|
||||
ui->dnshijack_listenport->setText(Int2String(Configs::dataStore->dns_server_listen_port));
|
||||
ui->dnshijack_v4resp->setText(Configs::dataStore->dns_v4_resp);
|
||||
ui->dnshijack_v6resp->setText(Configs::dataStore->dns_v6_resp);
|
||||
connect(ui->dnshijack_what, &QPushButton::clicked, this, [=] {
|
||||
connect(ui->dnshijack_what, &QPushButton::clicked, this, [=,this] {
|
||||
MessageBoxInfo("What is this?", Configs::Information::HijackInfo);
|
||||
});
|
||||
|
||||
@ -165,10 +165,10 @@ DialogManageRoutes::DialogManageRoutes(QWidget *parent) : QDialog(parent), ui(ne
|
||||
ui->redirect_listenport->setValidator(QRegExpValidator_Number);
|
||||
ui->redirect_listenport->setText(Int2String(Configs::dataStore->redirect_listen_port));
|
||||
|
||||
connect(ui->dnshijack_enable, &QCheckBox::stateChanged, this, [=](bool state) {
|
||||
connect(ui->dnshijack_enable, &QCheckBox::stateChanged, this, [=,this](bool state) {
|
||||
set_dns_hijack_enability(state);
|
||||
});
|
||||
connect(ui->redirect_enable, &QCheckBox::stateChanged, this, [=](bool state) {
|
||||
connect(ui->redirect_enable, &QCheckBox::stateChanged, this, [=,this](bool state) {
|
||||
ui->redirect_listenaddr->setEnabled(state);
|
||||
ui->redirect_listenport->setEnabled(state);
|
||||
});
|
||||
@ -238,7 +238,7 @@ void DialogManageRoutes::on_new_route_clicked() {
|
||||
routeChainWidget = new RouteItem(this, Configs::ProfileManager::NewRouteChain());
|
||||
routeChainWidget->setWindowModality(Qt::ApplicationModal);
|
||||
routeChainWidget->show();
|
||||
connect(routeChainWidget, &RouteItem::settingsChanged, this, [=](const std::shared_ptr<Configs::RoutingChain>& chain) {
|
||||
connect(routeChainWidget, &RouteItem::settingsChanged, this, [=,this](const std::shared_ptr<Configs::RoutingChain>& chain) {
|
||||
chainList << chain;
|
||||
reloadProfileItems();
|
||||
});
|
||||
@ -259,7 +259,7 @@ void DialogManageRoutes::on_export_route_clicked()
|
||||
|
||||
QToolTip::showText(QCursor::pos(), "Copied!", this);
|
||||
int r = ++tooltipID;
|
||||
QTimer::singleShot(1500, [=] {
|
||||
QTimer::singleShot(1500, [=,this] {
|
||||
if (tooltipID != r) return;
|
||||
QToolTip::hideText();
|
||||
});
|
||||
@ -284,7 +284,7 @@ void DialogManageRoutes::on_edit_route_clicked() {
|
||||
routeChainWidget = new RouteItem(this, chainList[idx]);
|
||||
routeChainWidget->setWindowModality(Qt::ApplicationModal);
|
||||
routeChainWidget->show();
|
||||
connect(routeChainWidget, &RouteItem::settingsChanged, this, [=](const std::shared_ptr<Configs::RoutingChain>& chain) {
|
||||
connect(routeChainWidget, &RouteItem::settingsChanged, this, [=,this](const std::shared_ptr<Configs::RoutingChain>& chain) {
|
||||
if (currentRoute == chainList[idx]) currentRoute = chain;
|
||||
chainList[idx] = chain;
|
||||
reloadProfileItems();
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
#endif
|
||||
|
||||
#include <QMessageBox>
|
||||
#define ADJUST_SIZE runOnThread([=] { adjustSize(); adjustPosition(mainwindow); }, this);
|
||||
#define ADJUST_SIZE runOnThread([=,this] { adjustSize(); adjustPosition(mainwindow); }, this);
|
||||
DialogVPNSettings::DialogVPNSettings(QWidget *parent) : QDialog(parent), ui(new Ui::DialogVPNSettings) {
|
||||
ui->setupUi(this);
|
||||
ADD_ASTERISK(this);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user