mirror of
https://github.com/debauchee/barrier.git
synced 2026-02-12 22:55:53 +08:00
added platform independent clipboard transfer stuff
clipboard owner support (MS windows done, X windows partial) added key transfer on ms windows mutex fixes in CClient (had race conditions) faster debug output in ms windows changed temporary screen name to "secondary" network fixes on ms windows (poll returned wrong result) fixed transparent cursor on ms windows
This commit is contained in:
@@ -2,8 +2,10 @@
|
||||
#include "CInputPacketStream.h"
|
||||
#include "COutputPacketStream.h"
|
||||
#include "CProtocolUtil.h"
|
||||
#include "CClipboard.h"
|
||||
#include "ISecondaryScreen.h"
|
||||
#include "ProtocolTypes.h"
|
||||
#include "CLock.h"
|
||||
#include "CThread.h"
|
||||
#include "CTimerThread.h"
|
||||
#include "XSynergy.h"
|
||||
@@ -63,7 +65,7 @@ void CClient::run(const CNetworkAddress& serverAddress)
|
||||
closeSecondaryScreen();
|
||||
}
|
||||
catch (XBase& e) {
|
||||
log((CLOG_ERR "client error: %s\n", e.what()));
|
||||
log((CLOG_ERR "client error: %s", e.what()));
|
||||
|
||||
// clean up
|
||||
thread->cancel();
|
||||
@@ -83,6 +85,17 @@ void CClient::run(const CNetworkAddress& serverAddress)
|
||||
}
|
||||
}
|
||||
|
||||
void CClient::onClipboardChanged()
|
||||
{
|
||||
log((CLOG_DEBUG "sending clipboard changed"));
|
||||
CLock lock(&m_mutex);
|
||||
if (m_output != NULL) {
|
||||
// m_output can be NULL if the screen calls this method
|
||||
// before we've gotten around to connecting to the server.
|
||||
CProtocolUtil::writef(m_output, kMsgCClipboard);
|
||||
}
|
||||
}
|
||||
|
||||
#include "CTCPSocket.h" // FIXME
|
||||
void CClient::runSession(void*)
|
||||
{
|
||||
@@ -136,10 +149,10 @@ void CClient::runSession(void*)
|
||||
// say hello back
|
||||
log((CLOG_DEBUG "say hello version %d.%d", kMajorVersion, kMinorVersion));
|
||||
CProtocolUtil::writef(output.get(), "Synergy%2i%2i%s",
|
||||
kMajorVersion, kMinorVersion,
|
||||
m_name.size(), m_name.data());
|
||||
kMajorVersion, kMinorVersion, &m_name);
|
||||
|
||||
// record streams in a more useful place
|
||||
CLock lock(&m_mutex);
|
||||
m_input = input.get();
|
||||
m_output = output.get();
|
||||
}
|
||||
@@ -291,7 +304,10 @@ void CClient::closeSecondaryScreen()
|
||||
void CClient::onEnter()
|
||||
{
|
||||
SInt32 x, y;
|
||||
CProtocolUtil::readf(m_input, kMsgCEnter + 4, &x, &y);
|
||||
{
|
||||
CLock lock(&m_mutex);
|
||||
CProtocolUtil::readf(m_input, kMsgCEnter + 4, &x, &y);
|
||||
}
|
||||
m_screen->enter(x, y);
|
||||
}
|
||||
|
||||
@@ -302,13 +318,16 @@ void CClient::onLeave()
|
||||
|
||||
void CClient::onGrabClipboard()
|
||||
{
|
||||
// FIXME
|
||||
m_screen->grabClipboard();
|
||||
}
|
||||
|
||||
void CClient::onScreenSaver()
|
||||
{
|
||||
SInt32 on;
|
||||
CProtocolUtil::readf(m_input, kMsgCScreenSaver + 4, &on);
|
||||
{
|
||||
CLock lock(&m_mutex);
|
||||
CProtocolUtil::readf(m_input, kMsgCScreenSaver + 4, &on);
|
||||
}
|
||||
// FIXME
|
||||
}
|
||||
|
||||
@@ -317,24 +336,63 @@ void CClient::onQueryInfo()
|
||||
SInt32 w, h;
|
||||
m_screen->getSize(&w, &h);
|
||||
SInt32 zoneSize = m_screen->getJumpZoneSize();
|
||||
|
||||
log((CLOG_DEBUG "sending info size=%d,%d zone=%d", w, h, zoneSize));
|
||||
CLock lock(&m_mutex);
|
||||
CProtocolUtil::writef(m_output, kMsgDInfo, w, h, zoneSize);
|
||||
}
|
||||
|
||||
void CClient::onQueryClipboard()
|
||||
{
|
||||
// FIXME
|
||||
// parse message
|
||||
UInt32 seqNum;
|
||||
CClipboard clipboard;
|
||||
{
|
||||
CLock lock(&m_mutex);
|
||||
CProtocolUtil::readf(m_input, kMsgQClipboard + 4, &seqNum);
|
||||
}
|
||||
log((CLOG_DEBUG "received query clipboard seqnum=%d", seqNum));
|
||||
|
||||
// get screen's clipboard data
|
||||
m_screen->getClipboard(&clipboard);
|
||||
|
||||
// marshall the data
|
||||
CString data = clipboard.marshall();
|
||||
|
||||
// send it
|
||||
log((CLOG_DEBUG "sending clipboard seqnum=%d, size=%d", seqNum, data.size()));
|
||||
{
|
||||
CLock lock(&m_mutex);
|
||||
CProtocolUtil::writef(m_output, kMsgDClipboard, seqNum, &data);
|
||||
}
|
||||
}
|
||||
|
||||
void CClient::onSetClipboard()
|
||||
{
|
||||
// FIXME
|
||||
CString data;
|
||||
{
|
||||
// parse message
|
||||
UInt32 seqNum;
|
||||
CLock lock(&m_mutex);
|
||||
CProtocolUtil::readf(m_input, kMsgDClipboard + 4, &seqNum, &data);
|
||||
}
|
||||
log((CLOG_DEBUG "received clipboard size=%d", data.size()));
|
||||
|
||||
// unmarshall
|
||||
CClipboard clipboard;
|
||||
clipboard.unmarshall(data);
|
||||
|
||||
// set screen's clipboard
|
||||
m_screen->setClipboard(&clipboard);
|
||||
}
|
||||
|
||||
void CClient::onKeyDown()
|
||||
{
|
||||
SInt32 id, mask;
|
||||
CProtocolUtil::readf(m_input, kMsgDKeyDown + 4, &id, &mask);
|
||||
{
|
||||
CLock lock(&m_mutex);
|
||||
CProtocolUtil::readf(m_input, kMsgDKeyDown + 4, &id, &mask);
|
||||
}
|
||||
m_screen->keyDown(static_cast<KeyID>(id),
|
||||
static_cast<KeyModifierMask>(mask));
|
||||
}
|
||||
@@ -342,7 +400,10 @@ void CClient::onKeyDown()
|
||||
void CClient::onKeyRepeat()
|
||||
{
|
||||
SInt32 id, mask, count;
|
||||
CProtocolUtil::readf(m_input, kMsgDKeyRepeat + 4, &id, &mask, &count);
|
||||
{
|
||||
CLock lock(&m_mutex);
|
||||
CProtocolUtil::readf(m_input, kMsgDKeyRepeat + 4, &id, &mask, &count);
|
||||
}
|
||||
m_screen->keyRepeat(static_cast<KeyID>(id),
|
||||
static_cast<KeyModifierMask>(mask),
|
||||
count);
|
||||
@@ -351,7 +412,10 @@ void CClient::onKeyRepeat()
|
||||
void CClient::onKeyUp()
|
||||
{
|
||||
SInt32 id, mask;
|
||||
CProtocolUtil::readf(m_input, kMsgDKeyUp + 4, &id, &mask);
|
||||
{
|
||||
CLock lock(&m_mutex);
|
||||
CProtocolUtil::readf(m_input, kMsgDKeyUp + 4, &id, &mask);
|
||||
}
|
||||
m_screen->keyUp(static_cast<KeyID>(id),
|
||||
static_cast<KeyModifierMask>(mask));
|
||||
}
|
||||
@@ -359,27 +423,39 @@ void CClient::onKeyUp()
|
||||
void CClient::onMouseDown()
|
||||
{
|
||||
SInt32 id;
|
||||
CProtocolUtil::readf(m_input, kMsgDMouseDown + 4, &id);
|
||||
{
|
||||
CLock lock(&m_mutex);
|
||||
CProtocolUtil::readf(m_input, kMsgDMouseDown + 4, &id);
|
||||
}
|
||||
m_screen->mouseDown(static_cast<ButtonID>(id));
|
||||
}
|
||||
|
||||
void CClient::onMouseUp()
|
||||
{
|
||||
SInt32 id;
|
||||
CProtocolUtil::readf(m_input, kMsgDMouseUp + 4, &id);
|
||||
{
|
||||
CLock lock(&m_mutex);
|
||||
CProtocolUtil::readf(m_input, kMsgDMouseUp + 4, &id);
|
||||
}
|
||||
m_screen->mouseUp(static_cast<ButtonID>(id));
|
||||
}
|
||||
|
||||
void CClient::onMouseMove()
|
||||
{
|
||||
SInt32 x, y;
|
||||
CProtocolUtil::readf(m_input, kMsgDMouseMove + 4, &x, &y);
|
||||
{
|
||||
CLock lock(&m_mutex);
|
||||
CProtocolUtil::readf(m_input, kMsgDMouseMove + 4, &x, &y);
|
||||
}
|
||||
m_screen->mouseMove(x, y);
|
||||
}
|
||||
|
||||
void CClient::onMouseWheel()
|
||||
{
|
||||
SInt32 delta;
|
||||
CProtocolUtil::readf(m_input, kMsgDMouseWheel + 4, &delta);
|
||||
{
|
||||
CLock lock(&m_mutex);
|
||||
CProtocolUtil::readf(m_input, kMsgDMouseWheel + 4, &delta);
|
||||
}
|
||||
m_screen->mouseWheel(delta);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user