diff --git a/src/gui/src/ServerConfig.cpp b/src/gui/src/ServerConfig.cpp index e24b8540..bafcdb74 100644 --- a/src/gui/src/ServerConfig.cpp +++ b/src/gui/src/ServerConfig.cpp @@ -53,6 +53,7 @@ ServerConfig::ServerConfig(QSettings* settings, int numColumns, int numRows , m_EnableDragAndDrop(false), m_DisableLockToScreen(false), m_ClipboardSharing(true), + m_ClipboardSharingSize(defaultClipboardSharingSize()), m_pMainWindow(mainWindow) { Q_ASSERT(m_pSettings); @@ -252,6 +253,7 @@ QTextStream& operator<<(QTextStream& outStream, const ServerConfig& config) outStream << "\t" << "win32KeepForeground = " << (config.win32KeepForeground() ? "true" : "false") << endl; outStream << "\t" << "disableLockToScreen = " << (config.disableLockToScreen() ? "true" : "false") << endl; outStream << "\t" << "clipboardSharing = " << (config.clipboardSharing() ? "true" : "false") << endl; + outStream << "\t" << "clipboardSharingSize = " << config.clipboardSharingSize() << endl; if (config.hasSwitchDelay()) outStream << "\t" << "switchDelay = " << config.switchDelay() << endl; @@ -405,3 +407,21 @@ void::ServerConfig::addToFirstEmptyGrid(const QString &clientName) } } } + +size_t ServerConfig::defaultClipboardSharingSize() { + return 3 * 1024; // 3 MiB +} + +size_t ServerConfig::setClipboardSharingSize(size_t size) { + if (size) { + size += 512; // Round up to the nearest megabyte + size /= 1024; + size *= 1024; + setClipboardSharing(true); + } else { + setClipboardSharing(false); + } + using std::swap; + swap (size, m_ClipboardSharingSize); + return size; +} diff --git a/src/gui/src/ServerConfig.h b/src/gui/src/ServerConfig.h index 9ab3ba3b..fb3284ce 100644 --- a/src/gui/src/ServerConfig.h +++ b/src/gui/src/ServerConfig.h @@ -64,6 +64,8 @@ class ServerConfig : public BaseConfig bool enableDragAndDrop() const { return m_EnableDragAndDrop; } bool disableLockToScreen() const { return m_DisableLockToScreen; } bool clipboardSharing() const { return m_ClipboardSharing; } + size_t clipboardSharingSize() const { return m_ClipboardSharingSize; } + static size_t defaultClipboardSharingSize(); void saveSettings(); void loadSettings(); @@ -94,6 +96,7 @@ class ServerConfig : public BaseConfig void setEnableDragAndDrop(bool on) { m_EnableDragAndDrop = on; } void setDisableLockToScreen(bool on) { m_DisableLockToScreen = on; } void setClipboardSharing(bool on) { m_ClipboardSharing = on; } + size_t setClipboardSharingSize(size_t size); QList& switchCorners() { return m_SwitchCorners; } HotkeyList& hotkeys() { return m_Hotkeys; } @@ -128,6 +131,7 @@ class ServerConfig : public BaseConfig bool m_EnableDragAndDrop; bool m_DisableLockToScreen; bool m_ClipboardSharing; + size_t m_ClipboardSharingSize; MainWindow* m_pMainWindow; }; diff --git a/src/gui/src/ServerConfigDialog.cpp b/src/gui/src/ServerConfigDialog.cpp index 8463a214..5b4342a0 100644 --- a/src/gui/src/ServerConfigDialog.cpp +++ b/src/gui/src/ServerConfigDialog.cpp @@ -60,6 +60,7 @@ ServerConfigDialog::ServerConfigDialog(QWidget* parent, ServerConfig& config, co m_pCheckBoxEnableDragAndDrop->setChecked(serverConfig().enableDragAndDrop()); m_pCheckBoxEnableClipboard->setChecked(serverConfig().clipboardSharing()); + m_pSpinBoxClipboardSizeLimit->setValue(serverConfig().clipboardSharingSize() / 1024); foreach(const Hotkey& hotkey, serverConfig().hotkeys()) m_pListHotkeys->addItem(hotkey.text()); @@ -105,6 +106,7 @@ void ServerConfigDialog::accept() serverConfig().setEnableDragAndDrop(m_pCheckBoxEnableDragAndDrop->isChecked()); serverConfig().setDisableLockToScreen(m_pCheckBoxDisableLockToScreen->isChecked()); serverConfig().setClipboardSharing(m_pCheckBoxEnableClipboard->isChecked()); + serverConfig().setClipboardSharingSize(m_pSpinBoxClipboardSizeLimit->value() * 1024); // 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. diff --git a/src/lib/server/Config.cpp b/src/lib/server/Config.cpp index 5db28725..f83eff9a 100644 --- a/src/lib/server/Config.cpp +++ b/src/lib/server/Config.cpp @@ -771,6 +771,9 @@ Config::readSectionOptions(ConfigReadContext& s) else if (name == "clipboardSharing") { addOption("", kOptionClipboardSharing, s.parseBoolean(value)); } + else if (name == "clipboardSharingSize") { + addOption("", kOptionClipboardSharingSize, s.parseInt(value)); + } else { handled = false; } @@ -1388,6 +1391,9 @@ Config::getOptionName(OptionID id) if (id == kOptionClipboardSharing) { return "clipboardSharing"; } + if (id == kOptionClipboardSharingSize) { + return "clipboardSharingSize"; + } return NULL; } @@ -1405,7 +1411,8 @@ Config::getOptionValue(OptionID id, OptionValue value) id == kOptionRelativeMouseMoves || id == kOptionWin32KeepForeground || id == kOptionScreenPreserveFocus || - id == kOptionClipboardSharing) { + id == kOptionClipboardSharing || + id == kOptionClipboardSharingSize) { return (value != 0) ? "true" : "false"; } if (id == kOptionModifierMapForShift || diff --git a/src/lib/synergy/option_types.h b/src/lib/synergy/option_types.h index 0ac6b358..66d2d659 100644 --- a/src/lib/synergy/option_types.h +++ b/src/lib/synergy/option_types.h @@ -69,6 +69,7 @@ static const OptionID kOptionRelativeMouseMoves = OPTION_CODE("MDLT"); static const OptionID kOptionWin32KeepForeground = OPTION_CODE("_KFW"); static const OptionID kOptionDisableLockToScreen = OPTION_CODE("DLTS"); static const OptionID kOptionClipboardSharing = OPTION_CODE("CLPS"); +static const OptionID kOptionClipboardSharingSize = OPTION_CODE("CLSZ"); //@} //! @name Screen switch corner enumeration