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