diff --git a/doc/user/configuration.md b/doc/user/configuration.md
index 17cd8b15a..22512b1a1 100644
--- a/doc/user/configuration.md
+++ b/doc/user/configuration.md
@@ -141,6 +141,7 @@ block of a server config file as seen below. This section is used by the GUI to
[internalConfig]
clipboardSharing=true
clipboardSharingSize=@Variant(\0\0\0\x84\0\0\0\0\0\0<\0)
+defaultLockToScreenState=false
disableLockToScreen=false
hasHeartbeat=false
hasSwitchDelay=false
diff --git a/src/lib/deskflow/OptionTypes.h b/src/lib/deskflow/OptionTypes.h
index d231ed471..ed0c249dc 100644
--- a/src/lib/deskflow/OptionTypes.h
+++ b/src/lib/deskflow/OptionTypes.h
@@ -56,6 +56,7 @@ static const OptionID kOptionXTestXineramaUnaware = OPTION_CODE("XTXU");
static const OptionID kOptionScreenPreserveFocus = OPTION_CODE("SFOC");
static const OptionID kOptionRelativeMouseMoves = OPTION_CODE("MDLT");
static const OptionID kOptionWin32KeepForeground = OPTION_CODE("_KFW");
+static const OptionID kOptionDefaultLockToScreenState = OPTION_CODE("LTSS");
static const OptionID kOptionDisableLockToScreen = OPTION_CODE("DLTS");
static const OptionID kOptionClipboardSharing = OPTION_CODE("CLPS");
static const OptionID kOptionClipboardSharingSize = OPTION_CODE("CLSZ");
diff --git a/src/lib/gui/config/ServerConfig.cpp b/src/lib/gui/config/ServerConfig.cpp
index 965e53cec..4e4239d93 100644
--- a/src/lib/gui/config/ServerConfig.cpp
+++ b/src/lib/gui/config/ServerConfig.cpp
@@ -53,23 +53,24 @@ bool ServerConfig::save(const QString &fileName) const
bool ServerConfig::operator==(const ServerConfig &sc) const
{
- return m_Screens == sc.m_Screens && //
- m_Columns == sc.m_Columns && //
- m_Rows == sc.m_Rows && //
- m_HasHeartbeat == sc.m_HasHeartbeat && //
- m_Heartbeat == sc.m_Heartbeat && //
- m_Protocol == sc.m_Protocol && //
- m_RelativeMouseMoves == sc.m_RelativeMouseMoves && //
- m_Win32KeepForeground == sc.m_Win32KeepForeground && //
- m_HasSwitchDelay == sc.m_HasSwitchDelay && //
- m_SwitchDelay == sc.m_SwitchDelay && //
- m_HasSwitchDoubleTap == sc.m_HasSwitchDoubleTap && //
- m_SwitchDoubleTap == sc.m_SwitchDoubleTap && //
- m_SwitchCornerSize == sc.m_SwitchCornerSize && //
- m_SwitchCorners == sc.m_SwitchCorners && //
- m_Hotkeys == sc.m_Hotkeys && //
- m_DisableLockToScreen == sc.m_DisableLockToScreen && //
- m_ClipboardSharing == sc.m_ClipboardSharing && //
+ return m_Screens == sc.m_Screens && //
+ m_Columns == sc.m_Columns && //
+ m_Rows == sc.m_Rows && //
+ m_HasHeartbeat == sc.m_HasHeartbeat && //
+ m_Heartbeat == sc.m_Heartbeat && //
+ m_Protocol == sc.m_Protocol && //
+ m_RelativeMouseMoves == sc.m_RelativeMouseMoves && //
+ m_Win32KeepForeground == sc.m_Win32KeepForeground && //
+ m_HasSwitchDelay == sc.m_HasSwitchDelay && //
+ m_SwitchDelay == sc.m_SwitchDelay && //
+ m_HasSwitchDoubleTap == sc.m_HasSwitchDoubleTap && //
+ m_SwitchDoubleTap == sc.m_SwitchDoubleTap && //
+ m_SwitchCornerSize == sc.m_SwitchCornerSize && //
+ m_SwitchCorners == sc.m_SwitchCorners && //
+ m_Hotkeys == sc.m_Hotkeys && //
+ m_DefaultLockToScreenState == sc.m_DefaultLockToScreenState && //
+ m_DisableLockToScreen == sc.m_DisableLockToScreen && //
+ m_ClipboardSharing == sc.m_ClipboardSharing && //
m_ClipboardSharingSize == sc.m_ClipboardSharingSize;
}
@@ -115,6 +116,7 @@ void ServerConfig::commit()
settings().setValue("hasSwitchDoubleTap", hasSwitchDoubleTap());
settings().setValue("switchDoubleTap", switchDoubleTap());
settings().setValue("switchCornerSize", switchCornerSize());
+ settings().setValue("defaultLockToScreenState", defaultLockToScreenState());
settings().setValue("disableLockToScreen", disableLockToScreen());
settings().setValue("clipboardSharing", clipboardSharing());
settings().setValue("clipboardSharingSize", QVariant::fromValue(clipboardSharingSize()));
@@ -166,6 +168,7 @@ void ServerConfig::recall()
haveSwitchDoubleTap(settings().value("hasSwitchDoubleTap", false).toBool());
setSwitchDoubleTap(settings().value("switchDoubleTap", 250).toInt());
setSwitchCornerSize(settings().value("switchCornerSize").toInt());
+ setDefaultLockToScreenState(settings().value("defaultLockToScreenState", false).toBool());
setDisableLockToScreen(settings().value("disableLockToScreen", false).toBool());
setClipboardSharingSize(
settings().value("clipboardSharingSize", (int)ServerConfig::defaultClipboardSharingSize()).toULongLong()
@@ -270,6 +273,8 @@ QTextStream &operator<<(QTextStream &outStream, const ServerConfig &config)
<< "relativeMouseMoves = " << (config.relativeMouseMoves() ? "true" : "false") << Qt::endl;
outStream << "\t"
<< "win32KeepForeground = " << (config.win32KeepForeground() ? "true" : "false") << Qt::endl;
+ outStream << "\t"
+ << "defaultLockToScreenState = " << (config.defaultLockToScreenState() ? "true" : "false") << Qt::endl;
outStream << "\t"
<< "disableLockToScreen = " << (config.disableLockToScreen() ? "true" : "false") << Qt::endl;
outStream << "\t"
diff --git a/src/lib/gui/config/ServerConfig.h b/src/lib/gui/config/ServerConfig.h
index 2c90726f5..ca6f70cf6 100644
--- a/src/lib/gui/config/ServerConfig.h
+++ b/src/lib/gui/config/ServerConfig.h
@@ -113,6 +113,10 @@ public:
{
return m_Hotkeys;
}
+ bool defaultLockToScreenState() const
+ {
+ return m_DefaultLockToScreenState;
+ }
bool disableLockToScreen() const
{
return m_DisableLockToScreen;
@@ -214,6 +218,10 @@ private:
{
m_SwitchCornerSize = val;
}
+ void setDefaultLockToScreenState(bool on)
+ {
+ m_DefaultLockToScreenState = on;
+ }
void setDisableLockToScreen(bool on)
{
m_DisableLockToScreen = on;
@@ -248,6 +256,7 @@ private:
bool m_HasSwitchDoubleTap = false;
int m_SwitchDoubleTap = 0;
int m_SwitchCornerSize = 0;
+ bool m_DefaultLockToScreenState = false;
bool m_DisableLockToScreen = false;
bool m_ClipboardSharing = true;
QString m_ClientAddress = "";
diff --git a/src/lib/gui/dialogs/ServerConfigDialog.cpp b/src/lib/gui/dialogs/ServerConfigDialog.cpp
index 38847fa70..5890bd5ff 100644
--- a/src/lib/gui/dialogs/ServerConfigDialog.cpp
+++ b/src/lib/gui/dialogs/ServerConfigDialog.cpp
@@ -137,6 +137,11 @@ ServerConfigDialog::ServerConfigDialog(QWidget *parent, ServerConfig &config)
ui->sbSwitchCornerSize->setValue(serverConfig().switchCornerSize());
+ ui->cbDefaultLockToScreenState->setChecked(serverConfig().defaultLockToScreenState());
+ connect(
+ ui->cbDefaultLockToScreenState, &QCheckBox::toggled, this, &ServerConfigDialog::toggleDefaultLockToScreenState
+ );
+
ui->cbDisableLockToScreen->setChecked(serverConfig().disableLockToScreen());
connect(ui->cbDisableLockToScreen, &QCheckBox::toggled, this, &ServerConfigDialog::toggleLockToScreen);
@@ -427,6 +432,12 @@ void ServerConfigDialog::setSwitchDelay(int delay)
onChange();
}
+void ServerConfigDialog::toggleDefaultLockToScreenState(bool state)
+{
+ serverConfig().setDefaultLockToScreenState(state);
+ onChange();
+}
+
void ServerConfigDialog::toggleLockToScreen(bool disabled)
{
serverConfig().setDisableLockToScreen(disabled);
diff --git a/src/lib/gui/dialogs/ServerConfigDialog.h b/src/lib/gui/dialogs/ServerConfigDialog.h
index 67a042b14..3726f3b49 100644
--- a/src/lib/gui/dialogs/ServerConfigDialog.h
+++ b/src/lib/gui/dialogs/ServerConfigDialog.h
@@ -59,6 +59,7 @@ protected:
void toggleSwitchDelay(bool enable);
void setSwitchDelay(int delay);
+ void toggleDefaultLockToScreenState(bool state);
void toggleLockToScreen(bool disabled);
void toggleWin32Foreground(bool enabled);
diff --git a/src/lib/gui/dialogs/ServerConfigDialog.ui b/src/lib/gui/dialogs/ServerConfigDialog.ui
index 30599024f..523b32db6 100644
--- a/src/lib/gui/dialogs/ServerConfigDialog.ui
+++ b/src/lib/gui/dialogs/ServerConfigDialog.ui
@@ -434,6 +434,13 @@
+ -
+
+
+ Enable lock to computer at startup
+
+
+
-
diff --git a/src/lib/server/Config.cpp b/src/lib/server/Config.cpp
index 566d167c3..ed60e3159 100644
--- a/src/lib/server/Config.cpp
+++ b/src/lib/server/Config.cpp
@@ -671,6 +671,8 @@ void Config::readSectionOptions(ConfigReadContext &s)
addOption("", kOptionRelativeMouseMoves, s.parseBoolean(value));
} else if (name == "win32KeepForeground") {
addOption("", kOptionWin32KeepForeground, s.parseBoolean(value));
+ } else if (name == "defaultLockToScreenState") {
+ addOption("", kOptionDefaultLockToScreenState, s.parseBoolean(value));
} else if (name == "disableLockToScreen") {
addOption("", kOptionDisableLockToScreen, s.parseBoolean(value));
} else if (name == "clipboardSharing") {
@@ -1249,6 +1251,9 @@ const char *Config::getOptionName(OptionID id)
if (id == kOptionScreenPreserveFocus) {
return "preserveFocus";
}
+ if (id == kOptionDefaultLockToScreenState) {
+ return "defaultLockToScreenState";
+ }
if (id == kOptionDisableLockToScreen) {
return "disableLockToScreen";
}
diff --git a/src/lib/server/Server.cpp b/src/lib/server/Server.cpp
index 8de74c419..00e6777e3 100644
--- a/src/lib/server/Server.cpp
+++ b/src/lib/server/Server.cpp
@@ -134,6 +134,9 @@ Server::Server(ServerConfig &config, PrimaryClient *primaryClient, deskflow::Scr
if (!m_disableLockToScreen && (m_primaryClient->getToggleMask() & KeyModifierScrollLock)) {
LOG_NOTE("scroll lock is on, locking cursor to screen");
m_lockedToScreen = true;
+ } else if (m_defaultLockToScreenState) {
+ LOG_NOTE("default screen lock is on, locking cursor to screen");
+ m_lockedToScreen = true;
}
}
@@ -337,7 +340,9 @@ bool Server::isLockedToScreen() const
// locked if we say we're locked
if (isLockedToScreenServer()) {
- LOG_NOTE("cursor is locked to screen, check scroll lock key");
+ if (!m_defaultLockToScreenState) {
+ LOG_NOTE("cursor is locked to screen, check scroll lock key");
+ }
return true;
}
@@ -1098,6 +1103,8 @@ void Server::processOptions()
m_switchNeedsAlt = (value != 0);
} else if (id == kOptionRelativeMouseMoves) {
newRelativeMoves = (value != 0);
+ } else if (id == kOptionDefaultLockToScreenState) {
+ m_defaultLockToScreenState = (value != 0);
} else if (id == kOptionDisableLockToScreen) {
m_disableLockToScreen = (value != 0);
} else if (id == kOptionClipboardSharing) {
diff --git a/src/lib/server/Server.h b/src/lib/server/Server.h
index e034610f0..bc64a84ab 100644
--- a/src/lib/server/Server.h
+++ b/src/lib/server/Server.h
@@ -450,6 +450,7 @@ private:
// screen locking (former scroll lock)
bool m_lockedToScreen = false;
+ bool m_defaultLockToScreenState = false;
bool m_disableLockToScreen = false;
bool m_enableClipboard = true;
};
diff --git a/translations/deskflow_es.ts b/translations/deskflow_es.ts
index b8516b74c..15541f092 100644
--- a/translations/deskflow_es.ts
+++ b/translations/deskflow_es.ts
@@ -1060,6 +1060,10 @@ Al habilitar esta opción, se deshabilitará la interfaz gráfica de usuario (GU
Browse for a config file
Busque un archivo de configuración
+
+ Enable lock to computer at startup
+ Activar el bloqueo del ordenador al iniciar
+
SettingsDialog
diff --git a/translations/deskflow_it.ts b/translations/deskflow_it.ts
index e849313fd..67b93a1b0 100644
--- a/translations/deskflow_it.ts
+++ b/translations/deskflow_it.ts
@@ -1060,6 +1060,10 @@ L'abilitazione di questa impostazione disabiliterà l'interfaccia graf
Browse for a config file
Cerca un file di configurazione
+
+ Enable lock to computer at startup
+ Abilita il blocco al computer all'avvio
+
SettingsDialog
diff --git a/translations/deskflow_ja.ts b/translations/deskflow_ja.ts
index 1d8a4ad9c..5fcedf7a5 100644
--- a/translations/deskflow_ja.ts
+++ b/translations/deskflow_ja.ts
@@ -1061,6 +1061,10 @@ Enabling this setting will disable the server config GUI.
Browse for a config file
設定ファイルを選択
+
+ Enable lock to computer at startup
+ 起動時にコンピューター間移動のロックを有効にする
+
SettingsDialog
diff --git a/translations/deskflow_ru.ts b/translations/deskflow_ru.ts
index 1c5681126..e50540237 100644
--- a/translations/deskflow_ru.ts
+++ b/translations/deskflow_ru.ts
@@ -1064,6 +1064,10 @@ Enabling this setting will disable the server config GUI.
Browse for a config file
Выбрать файл для конфигурации
+
+ Enable lock to computer at startup
+ Включить блокировку компьютера при запуске
+
SettingsDialog
diff --git a/translations/deskflow_zh_CN.ts b/translations/deskflow_zh_CN.ts
index 234dd8951..38d1e3aa7 100644
--- a/translations/deskflow_zh_CN.ts
+++ b/translations/deskflow_zh_CN.ts
@@ -1061,6 +1061,10 @@ Enabling this setting will disable the server config GUI.
Browse for a config file
浏览配置文件
+
+ Enable lock to computer at startup
+ 启动时启用锁定到计算机
+
SettingsDialog