2012-06-10 16:50:54 +00:00
|
|
|
/*
|
|
|
|
|
* synergy -- mouse and keyboard sharing utility
|
2016-09-07 14:24:00 +00:00
|
|
|
* Copyright (C) 2012-2016 Symless Ltd.
|
2012-06-10 16:50:54 +00:00
|
|
|
* Copyright (C) 2008 Volker Lanz (vl@fidra.de)
|
2024-07-02 19:07:06 +00:00
|
|
|
*
|
2012-06-10 16:50:54 +00:00
|
|
|
* This package is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU General Public License
|
2015-05-03 02:33:52 +00:00
|
|
|
* found in the file LICENSE that should have accompanied this file.
|
2024-07-02 19:07:06 +00:00
|
|
|
*
|
2012-06-10 16:50:54 +00:00
|
|
|
* This package is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include "ServerConfigDialog.h"
|
|
|
|
|
#include "ActionDialog.h"
|
2024-07-02 19:07:06 +00:00
|
|
|
#include "HotkeyDialog.h"
|
|
|
|
|
#include "ScreenSettingsDialog.h"
|
|
|
|
|
#include "ServerConfig.h"
|
2022-09-13 15:31:45 +00:00
|
|
|
#include "UpgradeDialog.h"
|
2024-07-04 09:14:54 +00:00
|
|
|
#include "shared/EditionType.h"
|
2012-06-10 16:50:54 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
#include <QFileDialog>
|
|
|
|
|
#include <QMessageBox>
|
2012-06-10 16:50:54 +00:00
|
|
|
#include <QtCore>
|
|
|
|
|
#include <QtGui>
|
|
|
|
|
|
2024-07-16 13:36:44 +00:00
|
|
|
ServerConfigDialog::ServerConfigDialog(
|
|
|
|
|
QWidget *parent, ServerConfig &config, AppConfig &appConfig)
|
2024-07-02 19:07:06 +00:00
|
|
|
: QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
|
2024-07-16 13:36:44 +00:00
|
|
|
Ui::ServerConfigDialogBase(),
|
2024-07-22 16:48:02 +00:00
|
|
|
m_OriginalServerConfig(config),
|
|
|
|
|
m_OriginalServerConfigIsExternal(config.useExternalConfig()),
|
|
|
|
|
m_OriginalServerConfigUsesExternalFile(config.configFile()),
|
2024-07-02 19:07:06 +00:00
|
|
|
m_ServerConfig(config),
|
2024-07-16 13:36:44 +00:00
|
|
|
m_ScreenSetupModel(
|
|
|
|
|
serverConfig().screens(), serverConfig().numColumns(),
|
|
|
|
|
serverConfig().numRows()),
|
|
|
|
|
m_Message(""),
|
|
|
|
|
m_appConfig(appConfig) {
|
2024-07-02 19:07:06 +00:00
|
|
|
setupUi(this);
|
|
|
|
|
|
2024-07-22 16:48:02 +00:00
|
|
|
m_pEditConfigFile->setText(serverConfig().configFile());
|
|
|
|
|
m_pCheckBoxUseExternalConfig->setChecked(serverConfig().useExternalConfig());
|
2024-07-02 19:07:06 +00:00
|
|
|
m_pCheckBoxHeartbeat->setChecked(serverConfig().hasHeartbeat());
|
|
|
|
|
m_pSpinBoxHeartbeat->setValue(serverConfig().heartbeat());
|
|
|
|
|
|
|
|
|
|
m_pCheckBoxRelativeMouseMoves->setChecked(
|
|
|
|
|
serverConfig().relativeMouseMoves());
|
|
|
|
|
m_pCheckBoxWin32KeepForeground->setChecked(
|
|
|
|
|
serverConfig().win32KeepForeground());
|
|
|
|
|
|
|
|
|
|
m_pCheckBoxSwitchDelay->setChecked(serverConfig().hasSwitchDelay());
|
|
|
|
|
m_pSpinBoxSwitchDelay->setValue(serverConfig().switchDelay());
|
|
|
|
|
|
|
|
|
|
m_pCheckBoxSwitchDoubleTap->setChecked(serverConfig().hasSwitchDoubleTap());
|
|
|
|
|
m_pSpinBoxSwitchDoubleTap->setValue(serverConfig().switchDoubleTap());
|
|
|
|
|
|
|
|
|
|
m_pCheckBoxCornerTopLeft->setChecked(
|
2024-07-22 16:48:02 +00:00
|
|
|
serverConfig().switchCorner(ScreenConfig::TopLeft));
|
2024-07-02 19:07:06 +00:00
|
|
|
m_pCheckBoxCornerTopRight->setChecked(
|
2024-07-22 16:48:02 +00:00
|
|
|
serverConfig().switchCorner(ScreenConfig::TopRight));
|
2024-07-02 19:07:06 +00:00
|
|
|
m_pCheckBoxCornerBottomLeft->setChecked(
|
2024-07-22 16:48:02 +00:00
|
|
|
serverConfig().switchCorner(ScreenConfig::BottomLeft));
|
2024-07-02 19:07:06 +00:00
|
|
|
m_pCheckBoxCornerBottomRight->setChecked(
|
2024-07-22 16:48:02 +00:00
|
|
|
serverConfig().switchCorner(ScreenConfig::BottomRight));
|
2024-07-02 19:07:06 +00:00
|
|
|
m_pSpinBoxSwitchCornerSize->setValue(serverConfig().switchCornerSize());
|
|
|
|
|
m_pCheckBoxDisableLockToScreen->setChecked(
|
|
|
|
|
serverConfig().disableLockToScreen());
|
|
|
|
|
|
|
|
|
|
m_pCheckBoxEnableClipboard->setChecked(serverConfig().clipboardSharing());
|
|
|
|
|
int clipboardSharingSizeM =
|
|
|
|
|
static_cast<int>(serverConfig().clipboardSharingSize() / 1024);
|
|
|
|
|
m_pSpinBoxClipboardSizeLimit->setValue(clipboardSharingSizeM);
|
|
|
|
|
m_pSpinBoxClipboardSizeLimit->setEnabled(serverConfig().clipboardSharing());
|
|
|
|
|
|
|
|
|
|
foreach (const Hotkey &hotkey, serverConfig().hotkeys())
|
|
|
|
|
m_pListHotkeys->addItem(hotkey.text());
|
|
|
|
|
|
|
|
|
|
m_pScreenSetupView->setModel(&m_ScreenSetupModel);
|
|
|
|
|
|
|
|
|
|
auto &screens = serverConfig().screens();
|
|
|
|
|
auto server = std::find_if(
|
|
|
|
|
screens.begin(), screens.end(), [this](const Screen &screen) {
|
|
|
|
|
return (screen.name() == serverConfig().getServerName());
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (server == screens.end()) {
|
|
|
|
|
Screen serverScreen(serverConfig().getServerName());
|
|
|
|
|
serverScreen.markAsServer();
|
2024-07-16 13:36:44 +00:00
|
|
|
model().screen(
|
|
|
|
|
serverConfig().numColumns() / 2, serverConfig().numRows() / 2) =
|
|
|
|
|
serverScreen;
|
2024-07-02 19:07:06 +00:00
|
|
|
} else {
|
|
|
|
|
server->markAsServer();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_pButtonAddComputer->setEnabled(!model().isFull());
|
2024-07-16 13:36:44 +00:00
|
|
|
connect(
|
|
|
|
|
m_pTrashScreenWidget, SIGNAL(screenRemoved()), this,
|
|
|
|
|
SLOT(onScreenRemoved()));
|
2024-07-02 19:07:06 +00:00
|
|
|
|
|
|
|
|
onChange();
|
|
|
|
|
|
|
|
|
|
// computers
|
2024-07-16 13:36:44 +00:00
|
|
|
connect(
|
|
|
|
|
&m_ScreenSetupModel, &ScreenSetupModel::screensChanged, this,
|
|
|
|
|
&ServerConfigDialog::onChange);
|
2024-07-02 19:07:06 +00:00
|
|
|
|
|
|
|
|
// advanced
|
2024-07-16 13:36:44 +00:00
|
|
|
connect(
|
|
|
|
|
m_pCheckBoxSwitchDelay, &QCheckBox::stateChanged, this,
|
|
|
|
|
[this](const int &v) {
|
|
|
|
|
serverConfig().haveSwitchDelay(v);
|
|
|
|
|
onChange();
|
|
|
|
|
});
|
|
|
|
|
connect(
|
|
|
|
|
m_pSpinBoxSwitchDelay,
|
|
|
|
|
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,
|
|
|
|
|
[this](const int &v) {
|
|
|
|
|
serverConfig().setSwitchDelay(v);
|
|
|
|
|
onChange();
|
|
|
|
|
});
|
|
|
|
|
connect(
|
|
|
|
|
m_pCheckBoxSwitchDoubleTap, &QCheckBox::stateChanged, this,
|
|
|
|
|
[this](const int &v) {
|
|
|
|
|
serverConfig().haveSwitchDoubleTap(v);
|
|
|
|
|
onChange();
|
|
|
|
|
});
|
|
|
|
|
connect(
|
|
|
|
|
m_pSpinBoxSwitchDoubleTap,
|
|
|
|
|
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,
|
|
|
|
|
[this](const int &v) {
|
|
|
|
|
serverConfig().setSwitchDoubleTap(v);
|
|
|
|
|
onChange();
|
|
|
|
|
});
|
|
|
|
|
connect(
|
|
|
|
|
m_pCheckBoxEnableClipboard, &QCheckBox::stateChanged, this,
|
|
|
|
|
[this](const int &v) {
|
|
|
|
|
serverConfig().setClipboardSharing(v);
|
|
|
|
|
onChange();
|
|
|
|
|
});
|
|
|
|
|
connect(
|
|
|
|
|
m_pSpinBoxClipboardSizeLimit,
|
|
|
|
|
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,
|
|
|
|
|
[this](const int &v) {
|
|
|
|
|
serverConfig().setClipboardSharingSize(v * 1024);
|
|
|
|
|
onChange();
|
|
|
|
|
});
|
|
|
|
|
connect(
|
|
|
|
|
m_pCheckBoxHeartbeat, &QCheckBox::stateChanged, this,
|
|
|
|
|
[this](const int &v) {
|
|
|
|
|
serverConfig().haveHeartbeat(v);
|
|
|
|
|
onChange();
|
|
|
|
|
});
|
|
|
|
|
connect(
|
|
|
|
|
m_pSpinBoxHeartbeat,
|
|
|
|
|
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,
|
|
|
|
|
[this](const int &v) {
|
|
|
|
|
serverConfig().setHeartbeat(v);
|
|
|
|
|
onChange();
|
|
|
|
|
});
|
|
|
|
|
connect(
|
|
|
|
|
m_pCheckBoxRelativeMouseMoves, &QCheckBox::stateChanged, this,
|
|
|
|
|
[this](const int &v) {
|
|
|
|
|
serverConfig().setRelativeMouseMoves(v);
|
|
|
|
|
onChange();
|
|
|
|
|
});
|
|
|
|
|
connect(
|
|
|
|
|
m_pCheckBoxWin32KeepForeground, &QCheckBox::stateChanged, this,
|
|
|
|
|
[this](const int &v) {
|
|
|
|
|
serverConfig().setWin32KeepForeground(v);
|
|
|
|
|
onChange();
|
|
|
|
|
});
|
|
|
|
|
connect(
|
|
|
|
|
m_pCheckBoxDisableLockToScreen, &QCheckBox::stateChanged, this,
|
|
|
|
|
[this](const int &v) {
|
|
|
|
|
serverConfig().setDisableLockToScreen(v);
|
|
|
|
|
onChange();
|
|
|
|
|
});
|
|
|
|
|
connect(
|
|
|
|
|
m_pCheckBoxCornerTopLeft, &QCheckBox::stateChanged, this,
|
|
|
|
|
[this](const int &v) {
|
2024-07-22 16:48:02 +00:00
|
|
|
serverConfig().setSwitchCorner(ScreenConfig::TopLeft, v);
|
2024-07-16 13:36:44 +00:00
|
|
|
onChange();
|
|
|
|
|
});
|
|
|
|
|
connect(
|
|
|
|
|
m_pCheckBoxCornerTopRight, &QCheckBox::stateChanged, this,
|
|
|
|
|
[this](const int &v) {
|
2024-07-22 16:48:02 +00:00
|
|
|
serverConfig().setSwitchCorner(ScreenConfig::TopRight, v);
|
2024-07-16 13:36:44 +00:00
|
|
|
onChange();
|
|
|
|
|
});
|
|
|
|
|
connect(
|
|
|
|
|
m_pCheckBoxCornerBottomLeft, &QCheckBox::stateChanged, this,
|
|
|
|
|
[this](const int &v) {
|
2024-07-22 16:48:02 +00:00
|
|
|
serverConfig().setSwitchCorner(ScreenConfig::BottomLeft, v);
|
2024-07-16 13:36:44 +00:00
|
|
|
onChange();
|
|
|
|
|
});
|
|
|
|
|
connect(
|
|
|
|
|
m_pCheckBoxCornerBottomRight, &QCheckBox::stateChanged, this,
|
|
|
|
|
[this](const int &v) {
|
2024-07-22 16:48:02 +00:00
|
|
|
serverConfig().setSwitchCorner(ScreenConfig::BottomRight, v);
|
2024-07-16 13:36:44 +00:00
|
|
|
onChange();
|
|
|
|
|
});
|
|
|
|
|
connect(
|
|
|
|
|
m_pSpinBoxSwitchCornerSize,
|
|
|
|
|
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,
|
|
|
|
|
[this](const int &v) {
|
|
|
|
|
serverConfig().setSwitchCornerSize(v);
|
|
|
|
|
onChange();
|
|
|
|
|
});
|
2021-08-20 12:22:07 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
// config
|
2024-07-16 13:36:44 +00:00
|
|
|
connect(
|
|
|
|
|
m_pCheckBoxUseExternalConfig, &QCheckBox::stateChanged, this,
|
|
|
|
|
[this](const int &v) {
|
|
|
|
|
serverConfig().setUseExternalConfig(v);
|
|
|
|
|
onChange();
|
|
|
|
|
});
|
2024-07-02 19:07:06 +00:00
|
|
|
connect(m_pEditConfigFile, &QLineEdit::textChanged, this, [this]() {
|
|
|
|
|
serverConfig().setConfigFile(m_pEditConfigFile->text());
|
2021-08-20 12:22:07 +00:00
|
|
|
onChange();
|
2024-07-02 19:07:06 +00:00
|
|
|
});
|
2012-06-10 16:50:54 +00:00
|
|
|
}
|
|
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
bool ServerConfigDialog::addClient(const QString &clientName) {
|
|
|
|
|
return addComputer(clientName, true);
|
Synergy 1161 when clicking on save preferences on configure server window, automatically apply all the new settings (#7081)
* SYNERGY-1161 When clicking on "Save" preferences on "Configure server" window, automatically apply all the new settings
*Added comparison for all classes which used in server config
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Added server config changes checking logic
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
* Update ChangeLog
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix code style
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
* Fix Linux build
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix Sonar code smells
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix Ubuntu, CentOS and Debian build
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix merge conflicts
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Update ChangeLog
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix server config OK button behaviour on autoconfig
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Update changelog
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix sonar codesmell
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix build
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Adding client on autoconfig silently
Co-authored-by: Andrii Batyiev <andrii-external@symless.com>
2021-09-06 08:25:55 +00:00
|
|
|
}
|
|
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
void ServerConfigDialog::showEvent(QShowEvent *event) {
|
|
|
|
|
QDialog::show();
|
2014-08-21 17:32:40 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
if (!m_Message.isEmpty()) {
|
|
|
|
|
// TODO: ideally this massage box should pop up after the dialog is shown
|
|
|
|
|
QMessageBox::information(this, tr("Configure server"), m_Message);
|
|
|
|
|
}
|
2014-08-21 17:32:40 +00:00
|
|
|
}
|
|
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
void ServerConfigDialog::accept() {
|
|
|
|
|
if (m_pCheckBoxUseExternalConfig->isChecked() &&
|
|
|
|
|
!QFile::exists(m_pEditConfigFile->text())) {
|
|
|
|
|
auto title = tr("Configuration filename invalid");
|
|
|
|
|
auto description =
|
|
|
|
|
tr("You have not filled in a valid configuration file for the synergy "
|
|
|
|
|
"server. "
|
|
|
|
|
"Do you want to browse for the configuration file now?");
|
|
|
|
|
|
|
|
|
|
auto selectedButton = QMessageBox::warning(
|
|
|
|
|
this, title, description, QMessageBox::Yes | QMessageBox::No);
|
|
|
|
|
|
|
|
|
|
if (selectedButton != QMessageBox::Yes ||
|
|
|
|
|
!on_m_pButtonBrowseConfigFile_clicked()) {
|
|
|
|
|
return;
|
2021-04-12 09:03:37 +00:00
|
|
|
}
|
2024-07-02 19:07:06 +00:00
|
|
|
}
|
2021-04-12 09:03:37 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
// now that the dialog has been accepted, copy the new server config to the
|
|
|
|
|
// original one, which is a reference to the one in MainWindow.
|
2024-07-22 16:48:02 +00:00
|
|
|
setOriginalServerConfig(serverConfig());
|
2012-06-10 16:50:54 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
QDialog::accept();
|
2012-06-10 16:50:54 +00:00
|
|
|
}
|
|
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
void ServerConfigDialog::reject() {
|
2024-07-22 16:48:02 +00:00
|
|
|
serverConfig().setUseExternalConfig(m_OriginalServerConfigIsExternal);
|
|
|
|
|
serverConfig().setConfigFile(m_OriginalServerConfigUsesExternalFile);
|
2021-08-20 12:22:07 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
QDialog::reject();
|
2021-08-20 12:22:07 +00:00
|
|
|
}
|
|
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
void ServerConfigDialog::on_m_pButtonNewHotkey_clicked() {
|
|
|
|
|
if (serverConfig().isHotkeysAvailable()) {
|
|
|
|
|
Hotkey hotkey;
|
2016-12-28 11:50:32 +00:00
|
|
|
HotkeyDialog dlg(this, hotkey);
|
2021-08-20 12:22:07 +00:00
|
|
|
if (dlg.exec() == QDialog::Accepted) {
|
2024-07-02 19:07:06 +00:00
|
|
|
serverConfig().hotkeys().append(hotkey);
|
|
|
|
|
m_pListHotkeys->addItem(hotkey.text());
|
|
|
|
|
onChange();
|
2021-08-20 12:22:07 +00:00
|
|
|
}
|
2024-07-02 19:07:06 +00:00
|
|
|
} else {
|
2024-07-04 09:14:54 +00:00
|
|
|
#ifdef SYNERGY_ENABLE_LICENSING
|
|
|
|
|
auto edition = appConfig().edition();
|
|
|
|
|
if (edition == Edition::kLite || edition == Edition::kBasic) {
|
|
|
|
|
UpgradeDialog upgradeDialog(this);
|
|
|
|
|
if (appConfig().edition() == Edition::kLite) {
|
|
|
|
|
upgradeDialog.showDialog(
|
|
|
|
|
"Upgrade to Synergy 1 Ultimate to enable hotkeys");
|
|
|
|
|
} else if (appConfig().edition() == Edition::kBasic) {
|
|
|
|
|
upgradeDialog.showDialog("Upgrade to Synergy 1 Pro to enable hotkeys");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif // SYNERGY_ENABLE_LICENSING
|
2024-07-02 19:07:06 +00:00
|
|
|
}
|
2012-06-10 16:50:54 +00:00
|
|
|
}
|
|
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
void ServerConfigDialog::on_m_pButtonEditHotkey_clicked() {
|
|
|
|
|
int idx = m_pListHotkeys->currentRow();
|
|
|
|
|
Q_ASSERT(idx >= 0 && idx < serverConfig().hotkeys().size());
|
|
|
|
|
Hotkey &hotkey = serverConfig().hotkeys()[idx];
|
|
|
|
|
HotkeyDialog dlg(this, hotkey);
|
|
|
|
|
if (dlg.exec() == QDialog::Accepted) {
|
|
|
|
|
m_pListHotkeys->currentItem()->setText(hotkey.text());
|
2021-08-20 12:22:07 +00:00
|
|
|
onChange();
|
2024-07-02 19:07:06 +00:00
|
|
|
}
|
2012-06-10 16:50:54 +00:00
|
|
|
}
|
|
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
void ServerConfigDialog::on_m_pButtonRemoveHotkey_clicked() {
|
|
|
|
|
int idx = m_pListHotkeys->currentRow();
|
|
|
|
|
Q_ASSERT(idx >= 0 && idx < serverConfig().hotkeys().size());
|
|
|
|
|
serverConfig().hotkeys().removeAt(idx);
|
|
|
|
|
m_pListActions->clear();
|
|
|
|
|
delete m_pListHotkeys->item(idx);
|
|
|
|
|
onChange();
|
|
|
|
|
}
|
2016-12-28 11:50:32 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
void ServerConfigDialog::on_m_pListHotkeys_itemSelectionChanged() {
|
|
|
|
|
bool itemsSelected = !m_pListHotkeys->selectedItems().isEmpty();
|
|
|
|
|
m_pButtonEditHotkey->setEnabled(itemsSelected);
|
|
|
|
|
m_pButtonRemoveHotkey->setEnabled(itemsSelected);
|
|
|
|
|
m_pButtonNewAction->setEnabled(itemsSelected);
|
2016-12-28 11:50:32 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
if (itemsSelected && serverConfig().hotkeys().size() > 0) {
|
|
|
|
|
m_pListActions->clear();
|
2016-12-28 11:50:32 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
int idx = m_pListHotkeys->row(m_pListHotkeys->selectedItems()[0]);
|
2016-12-28 11:50:32 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
// There's a bug somewhere around here: We get idx == 1 right after we
|
|
|
|
|
// deleted the next to last item, so idx can only possibly be 0. GDB shows
|
|
|
|
|
// we got called indirectly from the delete line in
|
|
|
|
|
// on_m_pButtonRemoveHotkey_clicked() above, but the delete is of course
|
|
|
|
|
// necessary and seems correct. The while() is a generalized workaround for
|
|
|
|
|
// all that and shouldn't be required.
|
|
|
|
|
while (idx >= 0 && idx >= serverConfig().hotkeys().size())
|
|
|
|
|
idx--;
|
2016-12-28 11:50:32 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
Q_ASSERT(idx >= 0 && idx < serverConfig().hotkeys().size());
|
|
|
|
|
|
|
|
|
|
const Hotkey &hotkey = serverConfig().hotkeys()[idx];
|
|
|
|
|
foreach (const Action &action, hotkey.actions())
|
|
|
|
|
m_pListActions->addItem(action.text());
|
|
|
|
|
}
|
2012-06-10 16:50:54 +00:00
|
|
|
}
|
|
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
void ServerConfigDialog::on_m_pButtonNewAction_clicked() {
|
|
|
|
|
int idx = m_pListHotkeys->currentRow();
|
|
|
|
|
Q_ASSERT(idx >= 0 && idx < serverConfig().hotkeys().size());
|
|
|
|
|
Hotkey &hotkey = serverConfig().hotkeys()[idx];
|
|
|
|
|
|
|
|
|
|
Action action;
|
|
|
|
|
ActionDialog dlg(this, serverConfig(), hotkey, action);
|
|
|
|
|
if (dlg.exec() == QDialog::Accepted) {
|
|
|
|
|
hotkey.actions().append(action);
|
|
|
|
|
m_pListActions->addItem(action.text());
|
|
|
|
|
onChange();
|
|
|
|
|
}
|
2012-06-10 16:50:54 +00:00
|
|
|
}
|
|
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
void ServerConfigDialog::on_m_pButtonEditAction_clicked() {
|
|
|
|
|
int idxHotkey = m_pListHotkeys->currentRow();
|
|
|
|
|
Q_ASSERT(idxHotkey >= 0 && idxHotkey < serverConfig().hotkeys().size());
|
|
|
|
|
Hotkey &hotkey = serverConfig().hotkeys()[idxHotkey];
|
2012-06-10 16:50:54 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
int idxAction = m_pListActions->currentRow();
|
|
|
|
|
Q_ASSERT(idxAction >= 0 && idxAction < hotkey.actions().size());
|
|
|
|
|
Action &action = hotkey.actions()[idxAction];
|
2012-06-10 16:50:54 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
ActionDialog dlg(this, serverConfig(), hotkey, action);
|
|
|
|
|
if (dlg.exec() == QDialog::Accepted) {
|
|
|
|
|
m_pListActions->currentItem()->setText(action.text());
|
|
|
|
|
onChange();
|
|
|
|
|
}
|
2012-06-10 16:50:54 +00:00
|
|
|
}
|
|
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
void ServerConfigDialog::on_m_pButtonRemoveAction_clicked() {
|
|
|
|
|
int idxHotkey = m_pListHotkeys->currentRow();
|
|
|
|
|
Q_ASSERT(idxHotkey >= 0 && idxHotkey < serverConfig().hotkeys().size());
|
|
|
|
|
Hotkey &hotkey = serverConfig().hotkeys()[idxHotkey];
|
2012-06-10 16:50:54 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
int idxAction = m_pListActions->currentRow();
|
|
|
|
|
Q_ASSERT(idxAction >= 0 && idxAction < hotkey.actions().size());
|
2012-06-10 16:50:54 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
hotkey.actions().removeAt(idxAction);
|
|
|
|
|
delete m_pListActions->currentItem();
|
|
|
|
|
onChange();
|
2012-06-10 16:50:54 +00:00
|
|
|
}
|
|
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
void ServerConfigDialog::on_m_pCheckBoxEnableClipboard_stateChanged(
|
|
|
|
|
int const state) {
|
|
|
|
|
m_pSpinBoxClipboardSizeLimit->setEnabled(state == Qt::Checked);
|
|
|
|
|
if ((state == Qt::Checked) && (!m_pSpinBoxClipboardSizeLimit->value())) {
|
|
|
|
|
int size = static_cast<int>(
|
|
|
|
|
(serverConfig().defaultClipboardSharingSize() + 512) / 1024);
|
|
|
|
|
m_pSpinBoxClipboardSizeLimit->setValue(size ? size : 1);
|
|
|
|
|
}
|
2017-01-30 14:45:30 +00:00
|
|
|
}
|
|
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
void ServerConfigDialog::on_m_pListActions_itemSelectionChanged() {
|
|
|
|
|
m_pButtonEditAction->setEnabled(!m_pListActions->selectedItems().isEmpty());
|
|
|
|
|
m_pButtonRemoveAction->setEnabled(!m_pListActions->selectedItems().isEmpty());
|
2012-06-10 16:50:54 +00:00
|
|
|
}
|
2021-04-09 14:53:27 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
void ServerConfigDialog::on_m_pButtonAddComputer_clicked() {
|
|
|
|
|
addComputer("", false);
|
2021-04-09 14:53:27 +00:00
|
|
|
}
|
|
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
void ServerConfigDialog::onScreenRemoved() {
|
|
|
|
|
m_pButtonAddComputer->setEnabled(true);
|
|
|
|
|
onChange();
|
2021-04-09 14:53:27 +00:00
|
|
|
}
|
2021-04-13 16:04:58 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
void ServerConfigDialog::on_m_pCheckBoxUseExternalConfig_toggled(bool checked) {
|
|
|
|
|
m_pLabelConfigFile->setEnabled(checked);
|
|
|
|
|
m_pEditConfigFile->setEnabled(checked);
|
|
|
|
|
m_pButtonBrowseConfigFile->setEnabled(checked);
|
2021-04-12 09:03:37 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
m_pTabWidget->setTabEnabled(0, !checked);
|
|
|
|
|
m_pTabWidget->setTabEnabled(1, !checked);
|
|
|
|
|
m_pTabWidget->setTabEnabled(2, !checked);
|
2021-04-12 09:03:37 +00:00
|
|
|
}
|
|
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
bool ServerConfigDialog::on_m_pButtonBrowseConfigFile_clicked() {
|
2021-04-12 09:03:37 +00:00
|
|
|
#if defined(Q_OS_WIN)
|
2024-07-02 19:07:06 +00:00
|
|
|
const QString synergyConfigFilter(
|
|
|
|
|
QObject::tr("Synergy Configurations (*.sgc);;All files (*.*)"));
|
2021-04-12 09:03:37 +00:00
|
|
|
#else
|
2024-07-02 19:07:06 +00:00
|
|
|
const QString synergyConfigFilter(
|
|
|
|
|
QObject::tr("Synergy Configurations (*.conf);;All files (*.*)"));
|
2021-04-12 09:03:37 +00:00
|
|
|
#endif
|
|
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
QString fileName = QFileDialog::getOpenFileName(
|
|
|
|
|
this, tr("Browse for a synergys config file"), QString(),
|
|
|
|
|
synergyConfigFilter);
|
2021-04-12 09:03:37 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
if (!fileName.isEmpty()) {
|
|
|
|
|
m_pEditConfigFile->setText(fileName);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
2021-04-12 09:03:37 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
return false;
|
2021-04-12 09:03:37 +00:00
|
|
|
}
|
2021-08-20 12:22:07 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
bool ServerConfigDialog::addComputer(const QString &clientName, bool doSilent) {
|
|
|
|
|
bool isAccepted = false;
|
|
|
|
|
Screen newScreen(clientName);
|
Synergy 1161 when clicking on save preferences on configure server window, automatically apply all the new settings (#7081)
* SYNERGY-1161 When clicking on "Save" preferences on "Configure server" window, automatically apply all the new settings
*Added comparison for all classes which used in server config
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Added server config changes checking logic
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
* Update ChangeLog
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix code style
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
* Fix Linux build
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix Sonar code smells
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix Ubuntu, CentOS and Debian build
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix merge conflicts
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Update ChangeLog
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix server config OK button behaviour on autoconfig
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Update changelog
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix sonar codesmell
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix build
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Adding client on autoconfig silently
Co-authored-by: Andrii Batyiev <andrii-external@symless.com>
2021-09-06 08:25:55 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
ScreenSettingsDialog dlg(this, &newScreen, &model().m_Screens);
|
|
|
|
|
if (doSilent || dlg.exec() == QDialog::Accepted) {
|
|
|
|
|
model().addScreen(newScreen);
|
|
|
|
|
isAccepted = true;
|
|
|
|
|
}
|
Synergy 1161 when clicking on save preferences on configure server window, automatically apply all the new settings (#7081)
* SYNERGY-1161 When clicking on "Save" preferences on "Configure server" window, automatically apply all the new settings
*Added comparison for all classes which used in server config
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Added server config changes checking logic
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
* Update ChangeLog
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix code style
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
* Fix Linux build
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix Sonar code smells
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix Ubuntu, CentOS and Debian build
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix merge conflicts
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Update ChangeLog
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix server config OK button behaviour on autoconfig
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Update changelog
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix sonar codesmell
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix build
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Adding client on autoconfig silently
Co-authored-by: Andrii Batyiev <andrii-external@symless.com>
2021-09-06 08:25:55 +00:00
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
m_pButtonAddComputer->setEnabled(!model().isFull());
|
|
|
|
|
return isAccepted;
|
Synergy 1161 when clicking on save preferences on configure server window, automatically apply all the new settings (#7081)
* SYNERGY-1161 When clicking on "Save" preferences on "Configure server" window, automatically apply all the new settings
*Added comparison for all classes which used in server config
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Added server config changes checking logic
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
* Update ChangeLog
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix code style
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
* Fix Linux build
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix Sonar code smells
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix Ubuntu, CentOS and Debian build
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix merge conflicts
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Update ChangeLog
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix server config OK button behaviour on autoconfig
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Update changelog
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix sonar codesmell
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Fix build
* SYNERGY-1161 When clicking on Save preferences on Configure server window, automatically apply all the new settings
*Adding client on autoconfig silently
Co-authored-by: Andrii Batyiev <andrii-external@symless.com>
2021-09-06 08:25:55 +00:00
|
|
|
}
|
|
|
|
|
|
2024-07-02 19:07:06 +00:00
|
|
|
void ServerConfigDialog::onChange() {
|
|
|
|
|
bool isAppConfigDataEqual =
|
2024-07-22 16:48:02 +00:00
|
|
|
m_OriginalServerConfigIsExternal == serverConfig().useExternalConfig() &&
|
|
|
|
|
m_OriginalServerConfigUsesExternalFile == serverConfig().configFile();
|
2024-07-02 19:07:06 +00:00
|
|
|
m_pButtonBox->button(QDialogButtonBox::Ok)
|
2024-07-16 13:36:44 +00:00
|
|
|
->setEnabled(
|
2024-07-22 16:48:02 +00:00
|
|
|
!isAppConfigDataEqual || !(m_OriginalServerConfig == m_ServerConfig));
|
2021-08-20 12:22:07 +00:00
|
|
|
}
|