diff --git a/src/gui/res/ServerConfigDialogBase.ui b/src/gui/res/ServerConfigDialogBase.ui
index 6d257ba2..cc44f66e 100644
--- a/src/gui/res/ServerConfigDialogBase.ui
+++ b/src/gui/res/ServerConfigDialogBase.ui
@@ -491,7 +491,21 @@ Double click on a screen to edit its settings.
+ -
+
+
+ Ignore auto config clients
+
+
+
-
+
+
+ Enable drag and drop file transfers
+
+
+
+ -
Qt::Vertical
@@ -504,13 +518,6 @@ Double click on a screen to edit its settings.
- -
-
-
- Ignore auto config clients
-
-
-
diff --git a/src/gui/src/MainWindow.cpp b/src/gui/src/MainWindow.cpp
index 4db1a65f..f1b1055f 100644
--- a/src/gui/src/MainWindow.cpp
+++ b/src/gui/src/MainWindow.cpp
@@ -546,7 +546,9 @@ void MainWindow::startSynergy()
#ifndef Q_OS_LINUX
- args << "--enable-drag-drop";
+ if (m_ServerConfig.enableDragAndDrop()) {
+ args << "--enable-drag-drop";
+ }
#endif
diff --git a/src/gui/src/ServerConfig.cpp b/src/gui/src/ServerConfig.cpp
index 70f5d46e..d84f91f0 100644
--- a/src/gui/src/ServerConfig.cpp
+++ b/src/gui/src/ServerConfig.cpp
@@ -50,6 +50,7 @@ ServerConfig::ServerConfig(QSettings* settings, int numColumns, int numRows ,
m_NumRows(numRows),
m_ServerName(serverName),
m_IgnoreAutoConfigClient(false),
+ m_EnableDragAndDrop(false),
m_pMainWindow(mainWindow)
{
Q_ASSERT(m_pSettings);
@@ -114,6 +115,7 @@ void ServerConfig::saveSettings()
settings().setValue("switchDoubleTap", switchDoubleTap());
settings().setValue("switchCornerSize", switchCornerSize());
settings().setValue("ignoreAutoConfigClient", ignoreAutoConfigClient());
+ settings().setValue("enableDragAndDrop", enableDragAndDrop());
writeSettings(settings(), switchCorners(), "switchCorner");
@@ -157,6 +159,7 @@ void ServerConfig::loadSettings()
setSwitchDoubleTap(settings().value("switchDoubleTap", 250).toInt());
setSwitchCornerSize(settings().value("switchCornerSize").toInt());
setIgnoreAutoConfigClient(settings().value("ignoreAutoConfigClient").toBool());
+ setEnableDragAndDrop(settings().value("enableDragAndDrop", true).toBool());
readSettings(settings(), switchCorners(), "switchCorner", false, NumSwitchCorners);
diff --git a/src/gui/src/ServerConfig.h b/src/gui/src/ServerConfig.h
index 9600b35d..15214a7e 100644
--- a/src/gui/src/ServerConfig.h
+++ b/src/gui/src/ServerConfig.h
@@ -61,6 +61,7 @@ class ServerConfig : public BaseConfig
const QList& switchCorners() const { return m_SwitchCorners; }
const HotkeyList& hotkeys() const { return m_Hotkeys; }
bool ignoreAutoConfigClient() const { return m_IgnoreAutoConfigClient; }
+ bool enableDragAndDrop() const { return m_EnableDragAndDrop; }
void saveSettings();
void loadSettings();
@@ -88,6 +89,7 @@ class ServerConfig : public BaseConfig
void setSwitchCorner(int c, bool on) { m_SwitchCorners[c] = on; }
void setSwitchCornerSize(int val) { m_SwitchCornerSize = val; }
void setIgnoreAutoConfigClient(bool on) { m_IgnoreAutoConfigClient = on; }
+ void setEnableDragAndDrop(bool on) { m_EnableDragAndDrop = on; }
QList& switchCorners() { return m_SwitchCorners; }
HotkeyList& hotkeys() { return m_Hotkeys; }
@@ -119,6 +121,7 @@ class ServerConfig : public BaseConfig
HotkeyList m_Hotkeys;
QString m_ServerName;
bool m_IgnoreAutoConfigClient;
+ bool m_EnableDragAndDrop;
MainWindow* m_pMainWindow;
};
diff --git a/src/gui/src/ServerConfigDialog.cpp b/src/gui/src/ServerConfigDialog.cpp
index 3fc04fab..501c758c 100644
--- a/src/gui/src/ServerConfigDialog.cpp
+++ b/src/gui/src/ServerConfigDialog.cpp
@@ -56,6 +56,8 @@ ServerConfigDialog::ServerConfigDialog(QWidget* parent, ServerConfig& config, co
m_pCheckBoxIgnoreAutoConfigClient->setChecked(serverConfig().ignoreAutoConfigClient());
+ m_pCheckBoxEnableDragAndDrop->setChecked(serverConfig().enableDragAndDrop());
+
foreach(const Hotkey& hotkey, serverConfig().hotkeys())
m_pListHotkeys->addItem(hotkey.text());
@@ -97,6 +99,7 @@ void ServerConfigDialog::accept()
serverConfig().setSwitchCorner(BaseConfig::BottomRight, m_pCheckBoxCornerBottomRight->isChecked());
serverConfig().setSwitchCornerSize(m_pSpinBoxSwitchCornerSize->value());
serverConfig().setIgnoreAutoConfigClient(m_pCheckBoxIgnoreAutoConfigClient->isChecked());
+ serverConfig().setEnableDragAndDrop(m_pCheckBoxEnableDragAndDrop->isChecked());
// 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/client/Client.cpp b/src/lib/client/Client.cpp
index 52258d69..ad586809 100644
--- a/src/lib/client/Client.cpp
+++ b/src/lib/client/Client.cpp
@@ -273,6 +273,7 @@ Client::leave()
if (m_sendClipboardThread != NULL) {
StreamChunker::interruptClipboard();
+ m_sendClipboardThread->wait();
m_sendClipboardThread = NULL;
}
diff --git a/src/lib/server/Server.cpp b/src/lib/server/Server.cpp
index 4420b2dd..1f04489c 100644
--- a/src/lib/server/Server.cpp
+++ b/src/lib/server/Server.cpp
@@ -509,6 +509,8 @@ Server::switchScreen(BaseClientProxy* dst,
// clipboard data could be corrupted on the other side
if (m_sendClipboardThread != NULL) {
StreamChunker::interruptClipboard();
+ m_sendClipboardThread->wait();
+ m_sendClipboardThread = NULL;
}
// send the clipboard data to new active screen