Fix spelling
This commit is contained in:
parent
3aee8dd341
commit
8c014b4bb6
|
@ -18,7 +18,7 @@ body:
|
||||||
id: version
|
id: version
|
||||||
attributes:
|
attributes:
|
||||||
label: Version
|
label: Version
|
||||||
description: What version of Barrier are you runnning?
|
description: What version of Barrier are you running?
|
||||||
options:
|
options:
|
||||||
- v2.0.0-RC1
|
- v2.0.0-RC1
|
||||||
- v2.0.0-RC2
|
- v2.0.0-RC2
|
||||||
|
|
|
@ -107,7 +107,7 @@ A: Start the binary with the argument `--config <path_to_saved_configuration>`
|
||||||
|
|
||||||
Q: After loading my configuration on the client the field 'Server IP' is still empty!
|
Q: After loading my configuration on the client the field 'Server IP' is still empty!
|
||||||
|
|
||||||
A: Edit your configuration to include the servers ip adress manually with
|
A: Edit your configuration to include the server's ip address manually with
|
||||||
(...)
|
(...)
|
||||||
section: options
|
section: options
|
||||||
serverhostname=<AAA.BBB.CCC.DDD>
|
serverhostname=<AAA.BBB.CCC.DDD>
|
||||||
|
|
|
@ -65,7 +65,7 @@ if exist bin\Debug (
|
||||||
mkdir bin\Release\platforms
|
mkdir bin\Release\platforms
|
||||||
copy %B_QT_FULLPATH%\plugins\platforms\qwindows.dll bin\Release\platforms\ > NUL
|
copy %B_QT_FULLPATH%\plugins\platforms\qwindows.dll bin\Release\platforms\ > NUL
|
||||||
) else (
|
) else (
|
||||||
echo Remember to copy supporting binaries and confiuration files!
|
echo Remember to copy supporting binaries and configuration files!
|
||||||
)
|
)
|
||||||
|
|
||||||
echo Build completed successfully
|
echo Build completed successfully
|
||||||
|
|
|
@ -47,7 +47,7 @@ section: links
|
||||||
end
|
end
|
||||||
|
|
||||||
# The aliases section is to map the full names of the computers to their logical names used in the screens section
|
# The aliases section is to map the full names of the computers to their logical names used in the screens section
|
||||||
# One way to find the actual name of a comptuer is to run hostname from a command window
|
# One way to find the actual name of a computer is to run hostname from a command window
|
||||||
section: aliases
|
section: aliases
|
||||||
# Laptop is actually known as John-Smiths-MacBook-3.local
|
# Laptop is actually known as John-Smiths-MacBook-3.local
|
||||||
John-Smiths-MacBook-3.local:
|
John-Smiths-MacBook-3.local:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
Thank you for chosing Barrier!
|
Thank you for choosing Barrier!
|
||||||
https://github.com/debauchee/barrier/
|
https://github.com/debauchee/barrier/
|
||||||
|
|
||||||
Barrier allows you to share your keyboard and mouse between computers over a network.
|
Barrier allows you to share your keyboard and mouse between computers over a network.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
ICNS_BASE=../dist/macos/bundle/Barrier.app/Contents/Resources
|
ICNS_BASE=../dist/macos/bundle/Barrier.app/Contents/Resources
|
||||||
if ! which magick >/dev/null 2>&1; then
|
if ! which magick >/dev/null 2>&1; then
|
||||||
echo "Need ImageMagic for this"
|
echo "Need ImageMagick for this"
|
||||||
exit 10
|
exit 10
|
||||||
fi
|
fi
|
||||||
cd "$(dirname "$0")" || exit $?
|
cd "$(dirname "$0")" || exit $?
|
||||||
|
|
|
@ -73,7 +73,7 @@ BEGIN
|
||||||
VALUE "ProductName", "Barrier"
|
VALUE "ProductName", "Barrier"
|
||||||
VALUE "ProductVersion", BARRIER_VERSION
|
VALUE "ProductVersion", BARRIER_VERSION
|
||||||
VALUE "OriginalFilename", "barrierd.exe"
|
VALUE "OriginalFilename", "barrierd.exe"
|
||||||
VALUE "FileDescription", "Open source KVM software deamon"
|
VALUE "FileDescription", "Open source KVM software daemon"
|
||||||
VALUE "InternalName", "barrierd"
|
VALUE "InternalName", "barrierd"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
|
@ -624,7 +624,7 @@ QString MainWindow::configFilename()
|
||||||
if (m_pRadioInternalConfig->isChecked())
|
if (m_pRadioInternalConfig->isChecked())
|
||||||
{
|
{
|
||||||
// TODO: no need to use a temporary file, since we need it to
|
// TODO: no need to use a temporary file, since we need it to
|
||||||
// be permenant (since it'll be used for Windows services, etc).
|
// be permanent (since it'll be used for Windows services, etc).
|
||||||
m_pTempConfigFile = new QTemporaryFile();
|
m_pTempConfigFile = new QTemporaryFile();
|
||||||
if (!m_pTempConfigFile->open())
|
if (!m_pTempConfigFile->open())
|
||||||
{
|
{
|
||||||
|
@ -729,7 +729,7 @@ void MainWindow::stopBarrier()
|
||||||
|
|
||||||
void MainWindow::stopService()
|
void MainWindow::stopService()
|
||||||
{
|
{
|
||||||
// send empty command to stop service from laucning anything.
|
// send empty command to stop service from launching anything.
|
||||||
m_IpcClient.sendCommand("", appConfig().elevateMode());
|
m_IpcClient.sendCommand("", appConfig().elevateMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,7 @@ void ServerConfigDialog::showEvent(QShowEvent* event)
|
||||||
|
|
||||||
if (!m_Message.isEmpty())
|
if (!m_Message.isEmpty())
|
||||||
{
|
{
|
||||||
// TODO: ideally this massage box should pop up after the dialog is shown
|
// TODO: ideally this message box should pop up after the dialog is shown
|
||||||
QMessageBox::information(this, tr("Configure server"), m_Message);
|
QMessageBox::information(this, tr("Configure server"), m_Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ SetupWizard::SetupWizard(MainWindow& mainWindow, bool startMain) :
|
||||||
|
|
||||||
#elif defined(Q_OS_WIN)
|
#elif defined(Q_OS_WIN)
|
||||||
|
|
||||||
// when areo is disabled on windows, the next/back buttons
|
// when aero is disabled on windows, the next/back buttons
|
||||||
// are hidden (must be a qt bug) -- resizing the window
|
// are hidden (must be a qt bug) -- resizing the window
|
||||||
// to +1 of the original height seems to fix this.
|
// to +1 of the original height seems to fix this.
|
||||||
// NOTE: calling setMinimumSize after this will break
|
// NOTE: calling setMinimumSize after this will break
|
||||||
|
|
|
@ -106,7 +106,7 @@ void SslCertificate::generateCertificate()
|
||||||
arguments.append("-x509");
|
arguments.append("-x509");
|
||||||
arguments.append("-nodes");
|
arguments.append("-nodes");
|
||||||
|
|
||||||
// valide duration
|
// valid duration
|
||||||
arguments.append("-days");
|
arguments.append("-days");
|
||||||
arguments.append(kCertificateLifetime);
|
arguments.append(kCertificateLifetime);
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ std::string ArchInternetWindows::urlEncode(const std::string& url)
|
||||||
|
|
||||||
std::string result(buffer);
|
std::string result(buffer);
|
||||||
|
|
||||||
// the win32 url encoding funcitons are pretty useless (to us) and only
|
// the win32 url encoding functions are pretty useless (to us) and only
|
||||||
// escape "unsafe" chars, but not + or =, so we need to replace these
|
// escape "unsafe" chars, but not + or =, so we need to replace these
|
||||||
// manually (and probably many other chars).
|
// manually (and probably many other chars).
|
||||||
barrier::string::findReplaceAll(result, "+", "%2B");
|
barrier::string::findReplaceAll(result, "+", "%2B");
|
||||||
|
|
|
@ -83,7 +83,7 @@ XArchEvalWinsock::eval() const noexcept
|
||||||
/* 10052 */{WSAENETRESET, "The connection must be reset because the Windows Sockets implementation dropped it"},
|
/* 10052 */{WSAENETRESET, "The connection must be reset because the Windows Sockets implementation dropped it"},
|
||||||
/* 10053 */{WSAECONNABORTED, "The virtual circuit was aborted due to timeout or other failure"},
|
/* 10053 */{WSAECONNABORTED, "The virtual circuit was aborted due to timeout or other failure"},
|
||||||
/* 10054 */{WSAECONNRESET, "The virtual circuit was reset by the remote side"},
|
/* 10054 */{WSAECONNRESET, "The virtual circuit was reset by the remote side"},
|
||||||
/* 10055 */{WSAENOBUFS, "No buffer space is available or a buffer deadlock has occured. The socket cannot be created"},
|
/* 10055 */{WSAENOBUFS, "No buffer space is available or a buffer deadlock has occurred. The socket cannot be created"},
|
||||||
/* 10056 */{WSAEISCONN, "The socket is already connected"},
|
/* 10056 */{WSAEISCONN, "The socket is already connected"},
|
||||||
/* 10057 */{WSAENOTCONN, "The socket is not connected"},
|
/* 10057 */{WSAENOTCONN, "The socket is not connected"},
|
||||||
/* 10058 */{WSAESHUTDOWN, "The socket has been shutdown"},
|
/* 10058 */{WSAESHUTDOWN, "The socket has been shutdown"},
|
||||||
|
@ -100,7 +100,7 @@ XArchEvalWinsock::eval() const noexcept
|
||||||
/* 10069 */{WSAEDQUOT, "Undocumented WinSock error code"},
|
/* 10069 */{WSAEDQUOT, "Undocumented WinSock error code"},
|
||||||
/* 10070 */{WSAESTALE, "Undocumented WinSock error code"},
|
/* 10070 */{WSAESTALE, "Undocumented WinSock error code"},
|
||||||
/* 10071 */{WSAEREMOTE, "Undocumented WinSock error code"},
|
/* 10071 */{WSAEREMOTE, "Undocumented WinSock error code"},
|
||||||
/* 10091 */{WSASYSNOTREADY, "Underlying network subsytem is not ready for network communication"},
|
/* 10091 */{WSASYSNOTREADY, "Underlying network subsystem is not ready for network communication"},
|
||||||
/* 10092 */{WSAVERNOTSUPPORTED, "The version of WinSock API support requested is not provided in this implementation"},
|
/* 10092 */{WSAVERNOTSUPPORTED, "The version of WinSock API support requested is not provided in this implementation"},
|
||||||
/* 10093 */{WSANOTINITIALISED, "WinSock subsystem not properly initialized"},
|
/* 10093 */{WSANOTINITIALISED, "WinSock subsystem not properly initialized"},
|
||||||
/* 10101 */{WSAEDISCON, "Virtual circuit has gracefully terminated connection"},
|
/* 10101 */{WSAEDISCON, "Virtual circuit has gracefully terminated connection"},
|
||||||
|
|
|
@ -56,7 +56,7 @@ public:
|
||||||
|
|
||||||
//! Deactivate screen saver
|
//! Deactivate screen saver
|
||||||
/*!
|
/*!
|
||||||
Deactivate (i.e. hide) the screen saver, reseting the screen saver
|
Deactivate (i.e. hide) the screen saver, resetting the screen saver
|
||||||
timer.
|
timer.
|
||||||
*/
|
*/
|
||||||
virtual void deactivate() = 0;
|
virtual void deactivate() = 0;
|
||||||
|
|
|
@ -267,8 +267,8 @@ extern const char* kMsgDSetOptions;
|
||||||
// 2 means the file transfer is finished.
|
// 2 means the file transfer is finished.
|
||||||
extern const char* kMsgDFileTransfer;
|
extern const char* kMsgDFileTransfer;
|
||||||
|
|
||||||
// drag infomation: primary <-> secondary
|
// drag information: primary <-> secondary
|
||||||
// transfer drag infomation. The first 2 bytes are used for storing
|
// transfer drag information. The first 2 bytes are used for storing
|
||||||
// the number of dragging objects. Then the following string consists
|
// the number of dragging objects. Then the following string consists
|
||||||
// of each object's directory.
|
// of each object's directory.
|
||||||
extern const char* kMsgDDragInfo;
|
extern const char* kMsgDDragInfo;
|
||||||
|
|
|
@ -62,7 +62,7 @@ Log::Log()
|
||||||
{
|
{
|
||||||
assert(s_log == NULL);
|
assert(s_log == NULL);
|
||||||
|
|
||||||
// other initalization
|
// other initialization
|
||||||
m_maxPriority = g_defaultMaxPriority;
|
m_maxPriority = g_defaultMaxPriority;
|
||||||
m_maxNewlineLength = 0;
|
m_maxNewlineLength = 0;
|
||||||
insert(new ConsoleLogOutputter);
|
insert(new ConsoleLogOutputter);
|
||||||
|
|
|
@ -119,7 +119,7 @@ public:
|
||||||
*/
|
*/
|
||||||
NetworkAddress getServerAddress() const;
|
NetworkAddress getServerAddress() const;
|
||||||
|
|
||||||
//! Return true if recieved file size is valid
|
//! Return true if received file size is valid
|
||||||
bool isReceivedFileSizeValid();
|
bool isReceivedFileSizeValid();
|
||||||
|
|
||||||
//! Return expected file size
|
//! Return expected file size
|
||||||
|
|
|
@ -45,7 +45,7 @@ const std::string& DataDirectories::global(const std::string& path)
|
||||||
const std::string& DataDirectories::systemconfig()
|
const std::string& DataDirectories::systemconfig()
|
||||||
{
|
{
|
||||||
// systemconfig() is a special case in that it will track the current value
|
// systemconfig() is a special case in that it will track the current value
|
||||||
// of global() unless and until it is explictly set otherwise
|
// of global() unless and until it is explicitly set otherwise
|
||||||
// previously it would default to the windows folder which was horrible!
|
// previously it would default to the windows folder which was horrible!
|
||||||
if (_systemconfig.empty())
|
if (_systemconfig.empty())
|
||||||
return global();
|
return global();
|
||||||
|
|
|
@ -25,7 +25,7 @@ class IJob;
|
||||||
//! Thread handle
|
//! Thread handle
|
||||||
/*!
|
/*!
|
||||||
Creating a Thread creates a new context of execution (i.e. thread) that
|
Creating a Thread creates a new context of execution (i.e. thread) that
|
||||||
runs simulatenously with the calling thread. A Thread is only a handle
|
runs simultaneously with the calling thread. A Thread is only a handle
|
||||||
to a thread; deleting a Thread does not cancel or destroy the thread it
|
to a thread; deleting a Thread does not cancel or destroy the thread it
|
||||||
refers to and multiple Thread objects can refer to the same thread.
|
refers to and multiple Thread objects can refer to the same thread.
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ public:
|
||||||
/*!
|
/*!
|
||||||
Change the priority of the thread. Normal priority is 0, 1 is
|
Change the priority of the thread. Normal priority is 0, 1 is
|
||||||
the next lower, etc. -1 is the next higher, etc. but boosting
|
the next lower, etc. -1 is the next higher, etc. but boosting
|
||||||
the priority may not be permitted and will be silenty ignored.
|
the priority may not be permitted and will be silently ignored.
|
||||||
*/
|
*/
|
||||||
void setPriority(int n);
|
void setPriority(int n);
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ public:
|
||||||
If \c hostname can be parsed as a numerical address then that's how
|
If \c hostname can be parsed as a numerical address then that's how
|
||||||
it's used, otherwise it's used as a host name. If \c hostname ends
|
it's used, otherwise it's used as a host name. If \c hostname ends
|
||||||
in ":[0-9]+" then that suffix is extracted and used as the port,
|
in ":[0-9]+" then that suffix is extracted and used as the port,
|
||||||
overridding the port parameter. The resulting port must be a valid
|
overriding the port parameter. The resulting port must be a valid
|
||||||
port number (zero is not a valid port number) otherwise \c XSocketAddress
|
port number (zero is not a valid port number) otherwise \c XSocketAddress
|
||||||
is thrown with an error of \c XSocketAddress::kBadPort. The hostname
|
is thrown with an error of \c XSocketAddress::kBadPort. The hostname
|
||||||
is not resolved by the c'tor; use \c resolve to do that.
|
is not resolved by the c'tor; use \c resolve to do that.
|
||||||
|
|
|
@ -658,7 +658,7 @@ SecureSocket::disconnect()
|
||||||
void SecureSocket::formatFingerprint(std::string& fingerprint, bool hex, bool separator)
|
void SecureSocket::formatFingerprint(std::string& fingerprint, bool hex, bool separator)
|
||||||
{
|
{
|
||||||
if (hex) {
|
if (hex) {
|
||||||
// to hexidecimal
|
// to hexadecimal
|
||||||
barrier::string::toHex(fingerprint, 2);
|
barrier::string::toHex(fingerprint, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -666,7 +666,7 @@ void SecureSocket::formatFingerprint(std::string& fingerprint, bool hex, bool se
|
||||||
barrier::string::uppercase(fingerprint);
|
barrier::string::uppercase(fingerprint);
|
||||||
|
|
||||||
if (separator) {
|
if (separator) {
|
||||||
// add colon to separate each 2 charactors
|
// add colon to separate each 2 characters
|
||||||
size_t separators = fingerprint.size() / 2;
|
size_t separators = fingerprint.size() / 2;
|
||||||
for (size_t i = 1; i < separators; i++) {
|
for (size_t i = 1; i < separators; i++) {
|
||||||
fingerprint.insert(i * 3 - 1, ":");
|
fingerprint.insert(i * 3 - 1, ":");
|
||||||
|
@ -830,7 +830,7 @@ SecureSocket::showSecureCipherInfo()
|
||||||
}
|
}
|
||||||
|
|
||||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
||||||
// m_ssl->m_ssl->session->ciphers is not forward compatable,
|
// m_ssl->m_ssl->session->ciphers is not forward compatible,
|
||||||
// In future release of OpenSSL, it's not visible,
|
// In future release of OpenSSL, it's not visible,
|
||||||
STACK_OF(SSL_CIPHER) * cStack = m_ssl->m_ssl->session->ciphers;
|
STACK_OF(SSL_CIPHER) * cStack = m_ssl->m_ssl->session->ciphers;
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -803,7 +803,7 @@ MSWindowsDesks::checkDesk()
|
||||||
|
|
||||||
// if active desktop changed then tell the old and new desk threads
|
// if active desktop changed then tell the old and new desk threads
|
||||||
// about the change. don't switch desktops when the screensaver is
|
// about the change. don't switch desktops when the screensaver is
|
||||||
// active becaue we'd most likely switch to the screensaver desktop
|
// active because we'd most likely switch to the screensaver desktop
|
||||||
// which would have the side effect of forcing the screensaver to
|
// which would have the side effect of forcing the screensaver to
|
||||||
// stop.
|
// stop.
|
||||||
if (name != m_activeDeskName && !m_screensaver->isActive()) {
|
if (name != m_activeDeskName && !m_screensaver->isActive()) {
|
||||||
|
|
|
@ -1330,7 +1330,7 @@ MSWindowsKeyState::getKeyID(UINT virtualKey, KeyButton button) const
|
||||||
if ((LOWORD(m_keyLayout) & 0xffffu) == 0x0412u) { // 0x0412 : Korean Locale ID
|
if ((LOWORD(m_keyLayout) & 0xffffu) == 0x0412u) { // 0x0412 : Korean Locale ID
|
||||||
if (virtualKey == VK_HANGUL || virtualKey == VK_HANJA) {
|
if (virtualKey == VK_HANGUL || virtualKey == VK_HANJA) {
|
||||||
// If shift-space is used to change the input mode,
|
// If shift-space is used to change the input mode,
|
||||||
// the extented bit is not set. So add it to get right key id.
|
// the extended bit is not set. So add it to get right key id.
|
||||||
button |= 0x100u;
|
button |= 0x100u;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,7 @@ private:
|
||||||
|
|
||||||
//! Relauncher error
|
//! Relauncher error
|
||||||
/*!
|
/*!
|
||||||
An error occured in the process watchdog.
|
An error occurred in the process watchdog.
|
||||||
*/
|
*/
|
||||||
class XMSWindowsWatchdogError : public XBarrier {
|
class XMSWindowsWatchdogError : public XBarrier {
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -52,7 +52,7 @@ OSXClipboard::OSXClipboard() :
|
||||||
|
|
||||||
OSStatus syncErr = PasteboardSynchronize(m_pboard);
|
OSStatus syncErr = PasteboardSynchronize(m_pboard);
|
||||||
if (syncErr != noErr) {
|
if (syncErr != noErr) {
|
||||||
LOG((CLOG_DEBUG "failed to syncronize clipboard: error %i", syncErr));
|
LOG((CLOG_DEBUG "failed to synchronize clipboard: error %i", syncErr));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,9 +30,9 @@ void
|
||||||
runCocoaApp()
|
runCocoaApp()
|
||||||
{
|
{
|
||||||
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
|
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
|
||||||
|
|
||||||
[NSApplication sharedApplication];
|
[NSApplication sharedApplication];
|
||||||
|
|
||||||
NSWindow* window = [[NSWindow alloc]
|
NSWindow* window = [[NSWindow alloc]
|
||||||
initWithContentRect: NSMakeRect(0, 0, 3, 3)
|
initWithContentRect: NSMakeRect(0, 0, 3, 3)
|
||||||
styleMask: NSBorderlessWindowMask
|
styleMask: NSBorderlessWindowMask
|
||||||
|
@ -41,16 +41,16 @@ runCocoaApp()
|
||||||
[window setTitle: @""];
|
[window setTitle: @""];
|
||||||
[window setAlphaValue:0.1];
|
[window setAlphaValue:0.1];
|
||||||
[window makeKeyAndOrderFront:nil];
|
[window makeKeyAndOrderFront:nil];
|
||||||
|
|
||||||
OSXDragView* dragView = [[OSXDragView alloc] initWithFrame:NSMakeRect(0, 0, 3, 3)];
|
OSXDragView* dragView = [[OSXDragView alloc] initWithFrame:NSMakeRect(0, 0, 3, 3)];
|
||||||
|
|
||||||
g_dragWindow = window;
|
g_dragWindow = window;
|
||||||
g_dragView = dragView;
|
g_dragView = dragView;
|
||||||
[window setContentView: dragView];
|
[window setContentView: dragView];
|
||||||
|
|
||||||
NSLog(@"starting cocoa loop");
|
NSLog(@"starting cocoa loop");
|
||||||
[NSApp run];
|
[NSApp run];
|
||||||
|
|
||||||
NSLog(@"cocoa: release");
|
NSLog(@"cocoa: release");
|
||||||
[pool release];
|
[pool release];
|
||||||
}
|
}
|
||||||
|
@ -65,25 +65,25 @@ void
|
||||||
fakeDragging(const char* str, int cursorX, int cursorY)
|
fakeDragging(const char* str, int cursorX, int cursorY)
|
||||||
{
|
{
|
||||||
g_ext = [NSString stringWithUTF8String:str];
|
g_ext = [NSString stringWithUTF8String:str];
|
||||||
|
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
NSRect screen = [[NSScreen mainScreen] frame];
|
NSRect screen = [[NSScreen mainScreen] frame];
|
||||||
NSLog ( @"screen size: witdh = %f height = %f", screen.size.width, screen.size.height);
|
NSLog ( @"screen size: width = %f height = %f", screen.size.width, screen.size.height);
|
||||||
NSLog ( @"mouseLocation: %d %d", cursorX, cursorY);
|
NSLog ( @"mouseLocation: %d %d", cursorX, cursorY);
|
||||||
|
|
||||||
int newPosX = 0;
|
int newPosX = 0;
|
||||||
int newPosY = 0;
|
int newPosY = 0;
|
||||||
newPosX = cursorX - 1;
|
newPosX = cursorX - 1;
|
||||||
newPosY = screen.size.height - cursorY - 1;
|
newPosY = screen.size.height - cursorY - 1;
|
||||||
|
|
||||||
NSRect rect = NSMakeRect(newPosX, newPosY, 3, 3);
|
NSRect rect = NSMakeRect(newPosX, newPosY, 3, 3);
|
||||||
NSLog ( @"newPosX: %d", newPosX);
|
NSLog ( @"newPosX: %d", newPosX);
|
||||||
NSLog ( @"newPosY: %d", newPosY);
|
NSLog ( @"newPosY: %d", newPosY);
|
||||||
|
|
||||||
[g_dragWindow setFrame:rect display:NO];
|
[g_dragWindow setFrame:rect display:NO];
|
||||||
[g_dragWindow makeKeyAndOrderFront:nil];
|
[g_dragWindow makeKeyAndOrderFront:nil];
|
||||||
[NSApp activateIgnoringOtherApps:YES];
|
[NSApp activateIgnoringOtherApps:YES];
|
||||||
|
|
||||||
[g_dragView setFileExt:g_ext];
|
[g_dragView setFileExt:g_ext];
|
||||||
|
|
||||||
CGEventRef down = CGEventCreateMouseEvent(CGEventSourceCreate(kCGEventSourceStateHIDSystemState), kCGEventLeftMouseDown, CGPointMake(cursorX, cursorY), kCGMouseButtonLeft);
|
CGEventRef down = CGEventCreateMouseEvent(CGEventSourceCreate(kCGEventSourceStateHIDSystemState), kCGEventLeftMouseDown, CGPointMake(cursorX, cursorY), kCGMouseButtonLeft);
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
* barrier -- mouse and keyboard sharing utility
|
* barrier -- mouse and keyboard sharing utility
|
||||||
* Copyright (C) 2012-2016 Symless Ltd.
|
* Copyright (C) 2012-2016 Symless Ltd.
|
||||||
* Copyright (C) 2004 Chris Schoeneman
|
* Copyright (C) 2004 Chris Schoeneman
|
||||||
*
|
*
|
||||||
* This package is free software; you can redistribute it and/or
|
* This package is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
* found in the file LICENSE that should have accompanied this file.
|
* found in the file LICENSE that should have accompanied this file.
|
||||||
*
|
*
|
||||||
* This package is distributed in the hope that it will be useful,
|
* This package is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
@ -110,10 +110,10 @@ OSXScreen::OSXScreen(IEventQueue* events, bool isPrimary, bool autoShowHideCurso
|
||||||
updateScreenShape(m_displayID, 0);
|
updateScreenShape(m_displayID, 0);
|
||||||
m_screensaver = new OSXScreenSaver(m_events, getEventTarget());
|
m_screensaver = new OSXScreenSaver(m_events, getEventTarget());
|
||||||
m_keyState = new OSXKeyState(m_events);
|
m_keyState = new OSXKeyState(m_events);
|
||||||
|
|
||||||
// only needed when running as a server.
|
// only needed when running as a server.
|
||||||
if (m_isPrimary) {
|
if (m_isPrimary) {
|
||||||
|
|
||||||
#if defined(MAC_OS_X_VERSION_10_9)
|
#if defined(MAC_OS_X_VERSION_10_9)
|
||||||
// we can't pass options to show the dialog, this must be done by the gui.
|
// we can't pass options to show the dialog, this must be done by the gui.
|
||||||
if (!AXIsProcessTrusted()) {
|
if (!AXIsProcessTrusted()) {
|
||||||
|
@ -126,7 +126,7 @@ OSXScreen::OSXScreen(IEventQueue* events, bool isPrimary, bool autoShowHideCurso
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// install display manager notification handler
|
// install display manager notification handler
|
||||||
CGDisplayRegisterReconfigurationCallback(displayReconfigurationCallback, this);
|
CGDisplayRegisterReconfigurationCallback(displayReconfigurationCallback, this);
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ OSXScreen::OSXScreen(IEventQueue* events, bool isPrimary, bool autoShowHideCurso
|
||||||
if (m_switchEventHandlerRef != 0) {
|
if (m_switchEventHandlerRef != 0) {
|
||||||
RemoveEventHandler(m_switchEventHandlerRef);
|
RemoveEventHandler(m_switchEventHandlerRef);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGDisplayRemoveReconfigurationCallback(displayReconfigurationCallback, this);
|
CGDisplayRemoveReconfigurationCallback(displayReconfigurationCallback, this);
|
||||||
|
|
||||||
delete m_keyState;
|
delete m_keyState;
|
||||||
|
@ -217,7 +217,7 @@ OSXScreen::~OSXScreen()
|
||||||
|
|
||||||
delete m_keyState;
|
delete m_keyState;
|
||||||
delete m_screensaver;
|
delete m_screensaver;
|
||||||
|
|
||||||
#if defined(MAC_OS_X_VERSION_10_7)
|
#if defined(MAC_OS_X_VERSION_10_7)
|
||||||
delete m_carbonLoopMutex;
|
delete m_carbonLoopMutex;
|
||||||
delete m_carbonLoopReady;
|
delete m_carbonLoopReady;
|
||||||
|
@ -273,7 +273,7 @@ OSXScreen::warpCursor(SInt32 x, SInt32 y)
|
||||||
pos.x = x;
|
pos.x = x;
|
||||||
pos.y = y;
|
pos.y = y;
|
||||||
CGWarpMouseCursorPosition(pos);
|
CGWarpMouseCursorPosition(pos);
|
||||||
|
|
||||||
// save new cursor position
|
// save new cursor position
|
||||||
m_xCursor = x;
|
m_xCursor = x;
|
||||||
m_yCursor = y;
|
m_yCursor = y;
|
||||||
|
@ -325,7 +325,7 @@ OSXScreen::registerHotKey(KeyID key, KeyModifierMask mask)
|
||||||
LOG((CLOG_DEBUG "could not map hotkey id=%04x mask=%04x", key, mask));
|
LOG((CLOG_DEBUG "could not map hotkey id=%04x mask=%04x", key, mask));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// choose hotkey id
|
// choose hotkey id
|
||||||
UInt32 id;
|
UInt32 id;
|
||||||
if (!m_oldHotKeyIDs.empty()) {
|
if (!m_oldHotKeyIDs.empty()) {
|
||||||
|
@ -351,7 +351,7 @@ OSXScreen::registerHotKey(KeyID key, KeyModifierMask mask)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
EventHotKeyID hkid = { 'SNRG', (UInt32)id };
|
EventHotKeyID hkid = { 'SNRG', (UInt32)id };
|
||||||
OSStatus status = RegisterEventHotKey(macKey, macMask, hkid,
|
OSStatus status = RegisterEventHotKey(macKey, macMask, hkid,
|
||||||
GetApplicationEventTarget(), 0,
|
GetApplicationEventTarget(), 0,
|
||||||
&ref);
|
&ref);
|
||||||
okay = (status == noErr);
|
okay = (status == noErr);
|
||||||
|
@ -366,7 +366,7 @@ OSXScreen::registerHotKey(KeyID key, KeyModifierMask mask)
|
||||||
}
|
}
|
||||||
|
|
||||||
m_hotKeys.insert(std::make_pair(id, HotKeyItem(ref, macKey, macMask)));
|
m_hotKeys.insert(std::make_pair(id, HotKeyItem(ref, macKey, macMask)));
|
||||||
|
|
||||||
LOG((CLOG_DEBUG "registered hotkey %s (id=%04x mask=%04x) as id=%d", barrier::KeyMap::formatKey(key, mask).c_str(), key, mask, id));
|
LOG((CLOG_DEBUG "registered hotkey %s (id=%04x mask=%04x) as id=%d", barrier::KeyMap::formatKey(key, mask).c_str(), key, mask, id));
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
@ -468,7 +468,7 @@ OSXScreen::postMouseEvent(CGPoint& pos) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CGEventType type = kCGEventMouseMoved;
|
CGEventType type = kCGEventMouseMoved;
|
||||||
|
|
||||||
SInt8 button = m_buttonState.getFirstButtonDown();
|
SInt8 button = m_buttonState.getFirstButtonDown();
|
||||||
|
@ -478,10 +478,10 @@ OSXScreen::postMouseEvent(CGPoint& pos) const
|
||||||
}
|
}
|
||||||
|
|
||||||
CGEventRef event = CGEventCreateMouseEvent(NULL, type, pos, static_cast<CGMouseButton>(button));
|
CGEventRef event = CGEventCreateMouseEvent(NULL, type, pos, static_cast<CGMouseButton>(button));
|
||||||
|
|
||||||
// Dragging events also need the click state
|
// Dragging events also need the click state
|
||||||
CGEventSetIntegerValueField(event, kCGMouseEventClickState, m_clickState);
|
CGEventSetIntegerValueField(event, kCGMouseEventClickState, m_clickState);
|
||||||
|
|
||||||
// Fix for sticky keys
|
// Fix for sticky keys
|
||||||
CGEventFlags modifiers = m_keyState->getModifierStateAsOSXFlags();
|
CGEventFlags modifiers = m_keyState->getModifierStateAsOSXFlags();
|
||||||
CGEventSetFlags(event, modifiers);
|
CGEventSetFlags(event, modifiers);
|
||||||
|
@ -503,7 +503,7 @@ OSXScreen::postMouseEvent(CGPoint& pos) const
|
||||||
CGEventSetDoubleValueField(event, kCGMouseEventDeltaY, deltaFY);
|
CGEventSetDoubleValueField(event, kCGMouseEventDeltaY, deltaFY);
|
||||||
|
|
||||||
CGEventPost(kCGHIDEventTap, event);
|
CGEventPost(kCGHIDEventTap, event);
|
||||||
|
|
||||||
CFRelease(event);
|
CFRelease(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -515,7 +515,7 @@ OSXScreen::fakeMouseButton(ButtonID id, bool press)
|
||||||
if (index >= NumButtonIDs) {
|
if (index >= NumButtonIDs) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CGPoint pos;
|
CGPoint pos;
|
||||||
if (!m_cursorPosValid) {
|
if (!m_cursorPosValid) {
|
||||||
SInt32 x, y;
|
SInt32 x, y;
|
||||||
|
@ -533,12 +533,12 @@ OSXScreen::fakeMouseButton(ButtonID id, bool press)
|
||||||
// since we don't have double click distance in NX APIs
|
// since we don't have double click distance in NX APIs
|
||||||
// we define our own defaults.
|
// we define our own defaults.
|
||||||
const double maxDiff = sqrt(2) + 0.0001;
|
const double maxDiff = sqrt(2) + 0.0001;
|
||||||
|
|
||||||
double clickTime = [NSEvent doubleClickInterval];
|
double clickTime = [NSEvent doubleClickInterval];
|
||||||
|
|
||||||
// As long as the click is within the time window and distance window
|
// As long as the click is within the time window and distance window
|
||||||
// increase clickState (double click, triple click, etc)
|
// increase clickState (double click, triple click, etc)
|
||||||
// This will allow for higher than triple click but the quartz documenation
|
// This will allow for higher than triple click but the quartz documentation
|
||||||
// does not specify that this should be limited to triple click
|
// does not specify that this should be limited to triple click
|
||||||
if (press) {
|
if (press) {
|
||||||
if ((ARCH->time() - m_lastClickTime) <= clickTime && diff <= maxDiff){
|
if ((ARCH->time() - m_lastClickTime) <= clickTime && diff <= maxDiff){
|
||||||
|
@ -547,41 +547,41 @@ OSXScreen::fakeMouseButton(ButtonID id, bool press)
|
||||||
else {
|
else {
|
||||||
m_clickState = 1;
|
m_clickState = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_lastClickTime = ARCH->time();
|
m_lastClickTime = ARCH->time();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_clickState == 1){
|
if (m_clickState == 1){
|
||||||
m_lastSingleClickXCursor = m_xCursor;
|
m_lastSingleClickXCursor = m_xCursor;
|
||||||
m_lastSingleClickYCursor = m_yCursor;
|
m_lastSingleClickYCursor = m_yCursor;
|
||||||
}
|
}
|
||||||
|
|
||||||
EMouseButtonState state = press ? kMouseButtonDown : kMouseButtonUp;
|
EMouseButtonState state = press ? kMouseButtonDown : kMouseButtonUp;
|
||||||
|
|
||||||
LOG((CLOG_DEBUG1 "faking mouse button id: %d press: %s", index, press ? "pressed" : "released"));
|
LOG((CLOG_DEBUG1 "faking mouse button id: %d press: %s", index, press ? "pressed" : "released"));
|
||||||
|
|
||||||
MouseButtonEventMapType thisButtonMap = MouseButtonEventMap[index];
|
MouseButtonEventMapType thisButtonMap = MouseButtonEventMap[index];
|
||||||
CGEventType type = thisButtonMap[state];
|
CGEventType type = thisButtonMap[state];
|
||||||
|
|
||||||
CGEventRef event = CGEventCreateMouseEvent(NULL, type, pos, static_cast<CGMouseButton>(index));
|
CGEventRef event = CGEventCreateMouseEvent(NULL, type, pos, static_cast<CGMouseButton>(index));
|
||||||
|
|
||||||
CGEventSetIntegerValueField(event, kCGMouseEventClickState, m_clickState);
|
CGEventSetIntegerValueField(event, kCGMouseEventClickState, m_clickState);
|
||||||
|
|
||||||
// Fix for sticky keys
|
// Fix for sticky keys
|
||||||
CGEventFlags modifiers = m_keyState->getModifierStateAsOSXFlags();
|
CGEventFlags modifiers = m_keyState->getModifierStateAsOSXFlags();
|
||||||
CGEventSetFlags(event, modifiers);
|
CGEventSetFlags(event, modifiers);
|
||||||
|
|
||||||
m_buttonState.set(index, state);
|
m_buttonState.set(index, state);
|
||||||
CGEventPost(kCGHIDEventTap, event);
|
CGEventPost(kCGHIDEventTap, event);
|
||||||
|
|
||||||
CFRelease(event);
|
CFRelease(event);
|
||||||
|
|
||||||
if (!press && (id == kButtonLeft)) {
|
if (!press && (id == kButtonLeft)) {
|
||||||
if (m_fakeDraggingStarted) {
|
if (m_fakeDraggingStarted) {
|
||||||
m_getDropTargetThread = new Thread(new TMethodJob<OSXScreen>(
|
m_getDropTargetThread = new Thread(new TMethodJob<OSXScreen>(
|
||||||
this, &OSXScreen::getDropTargetThread));
|
this, &OSXScreen::getDropTargetThread));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_draggingStarted = false;
|
m_draggingStarted = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -591,21 +591,21 @@ OSXScreen::getDropTargetThread(void*)
|
||||||
{
|
{
|
||||||
#if defined(MAC_OS_X_VERSION_10_7)
|
#if defined(MAC_OS_X_VERSION_10_7)
|
||||||
char* cstr = NULL;
|
char* cstr = NULL;
|
||||||
|
|
||||||
// wait for 5 secs for the drop destinaiton string to be filled.
|
// wait for 5 secs for the drop destinaiton string to be filled.
|
||||||
UInt32 timeout = ARCH->time() + 5;
|
UInt32 timeout = ARCH->time() + 5;
|
||||||
|
|
||||||
while (ARCH->time() < timeout) {
|
while (ARCH->time() < timeout) {
|
||||||
CFStringRef cfstr = getCocoaDropTarget();
|
CFStringRef cfstr = getCocoaDropTarget();
|
||||||
cstr = CFStringRefToUTF8String(cfstr);
|
cstr = CFStringRefToUTF8String(cfstr);
|
||||||
CFRelease(cfstr);
|
CFRelease(cfstr);
|
||||||
|
|
||||||
if (cstr != NULL) {
|
if (cstr != NULL) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ARCH->sleep(.1f);
|
ARCH->sleep(.1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cstr != NULL) {
|
if (cstr != NULL) {
|
||||||
LOG((CLOG_DEBUG "drop target: %s", cstr));
|
LOG((CLOG_DEBUG "drop target: %s", cstr));
|
||||||
m_dropTarget = cstr;
|
m_dropTarget = cstr;
|
||||||
|
@ -626,12 +626,12 @@ OSXScreen::fakeMouseMove(SInt32 x, SInt32 y)
|
||||||
if (m_fakeDraggingStarted) {
|
if (m_fakeDraggingStarted) {
|
||||||
m_buttonState.set(0, kMouseButtonDown);
|
m_buttonState.set(0, kMouseButtonDown);
|
||||||
}
|
}
|
||||||
|
|
||||||
// index 0 means left mouse button
|
// index 0 means left mouse button
|
||||||
if (m_buttonState.test(0)) {
|
if (m_buttonState.test(0)) {
|
||||||
m_draggingStarted = true;
|
m_draggingStarted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// synthesize event
|
// synthesize event
|
||||||
CGPoint pos;
|
CGPoint pos;
|
||||||
pos.x = x;
|
pos.x = x;
|
||||||
|
@ -679,11 +679,11 @@ OSXScreen::fakeMouseWheel(SInt32 xDelta, SInt32 yDelta) const
|
||||||
NULL, kCGScrollEventUnitLine, 2,
|
NULL, kCGScrollEventUnitLine, 2,
|
||||||
mapScrollWheelFromBarrier(yDelta),
|
mapScrollWheelFromBarrier(yDelta),
|
||||||
-mapScrollWheelFromBarrier(xDelta));
|
-mapScrollWheelFromBarrier(xDelta));
|
||||||
|
|
||||||
// Fix for sticky keys
|
// Fix for sticky keys
|
||||||
CGEventFlags modifiers = m_keyState->getModifierStateAsOSXFlags();
|
CGEventFlags modifiers = m_keyState->getModifierStateAsOSXFlags();
|
||||||
CGEventSetFlags(scrollEvent, modifiers);
|
CGEventSetFlags(scrollEvent, modifiers);
|
||||||
|
|
||||||
CGEventPost(kCGHIDEventTap, scrollEvent);
|
CGEventPost(kCGHIDEventTap, scrollEvent);
|
||||||
CFRelease(scrollEvent);
|
CFRelease(scrollEvent);
|
||||||
}
|
}
|
||||||
|
@ -754,11 +754,11 @@ OSXScreen::enable()
|
||||||
|
|
||||||
if (m_isPrimary) {
|
if (m_isPrimary) {
|
||||||
// FIXME -- start watching jump zones
|
// FIXME -- start watching jump zones
|
||||||
|
|
||||||
// kCGEventTapOptionDefault = 0x00000000 (Missing in 10.4, so specified literally)
|
// kCGEventTapOptionDefault = 0x00000000 (Missing in 10.4, so specified literally)
|
||||||
m_eventTapPort = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault,
|
m_eventTapPort = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault,
|
||||||
kCGEventMaskForAllEvents,
|
kCGEventMaskForAllEvents,
|
||||||
handleCGInputEvent,
|
handleCGInputEvent,
|
||||||
this);
|
this);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -773,10 +773,10 @@ OSXScreen::enable()
|
||||||
|
|
||||||
// there may be a better way to do this, but we register an event handler even if we're
|
// there may be a better way to do this, but we register an event handler even if we're
|
||||||
// not on the primary display (acting as a client). This way, if a local event comes in
|
// not on the primary display (acting as a client). This way, if a local event comes in
|
||||||
// (either keyboard or mouse), we can make sure to show the cursor if we've hidden it.
|
// (either keyboard or mouse), we can make sure to show the cursor if we've hidden it.
|
||||||
m_eventTapPort = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault,
|
m_eventTapPort = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault,
|
||||||
kCGEventMaskForAllEvents,
|
kCGEventMaskForAllEvents,
|
||||||
handleCGInputEventSecondary,
|
handleCGInputEventSecondary,
|
||||||
this);
|
this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -798,9 +798,9 @@ OSXScreen::disable()
|
||||||
if (m_autoShowHideCursor) {
|
if (m_autoShowHideCursor) {
|
||||||
showCursor();
|
showCursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME -- stop watching jump zones, stop capturing input
|
// FIXME -- stop watching jump zones, stop capturing input
|
||||||
|
|
||||||
if (m_eventTapRLSR) {
|
if (m_eventTapRLSR) {
|
||||||
CFRunLoopRemoveSource(CFRunLoopGetCurrent(), m_eventTapRLSR, kCFRunLoopDefaultMode);
|
CFRunLoopRemoveSource(CFRunLoopGetCurrent(), m_eventTapRLSR, kCFRunLoopDefaultMode);
|
||||||
CFRelease(m_eventTapRLSR);
|
CFRelease(m_eventTapRLSR);
|
||||||
|
@ -846,7 +846,7 @@ OSXScreen::enter()
|
||||||
io_registry_entry_t entry = IORegistryEntryFromPath(
|
io_registry_entry_t entry = IORegistryEntryFromPath(
|
||||||
kIOMasterPortDefault,
|
kIOMasterPortDefault,
|
||||||
"IOService:/IOResources/IODisplayWrangler");
|
"IOService:/IOResources/IODisplayWrangler");
|
||||||
|
|
||||||
if (entry != MACH_PORT_NULL) {
|
if (entry != MACH_PORT_NULL) {
|
||||||
IORegistryEntrySetCFProperty(entry, CFSTR("IORequestIdle"), kCFBooleanFalse);
|
IORegistryEntrySetCFProperty(entry, CFSTR("IORequestIdle"), kCFBooleanFalse);
|
||||||
IOObjectRelease(entry);
|
IOObjectRelease(entry);
|
||||||
|
@ -863,15 +863,15 @@ bool
|
||||||
OSXScreen::leave()
|
OSXScreen::leave()
|
||||||
{
|
{
|
||||||
hideCursor();
|
hideCursor();
|
||||||
|
|
||||||
if (isDraggingStarted()) {
|
if (isDraggingStarted()) {
|
||||||
String& fileList = getDraggingFilename();
|
String& fileList = getDraggingFilename();
|
||||||
|
|
||||||
if (!m_isPrimary) {
|
if (!m_isPrimary) {
|
||||||
if (fileList.empty() == false) {
|
if (fileList.empty() == false) {
|
||||||
ClientApp& app = ClientApp::instance();
|
ClientApp& app = ClientApp::instance();
|
||||||
Client* client = app.getClientPtr();
|
Client* client = app.getClientPtr();
|
||||||
|
|
||||||
DragInformation di;
|
DragInformation di;
|
||||||
di.setFilename(fileList);
|
di.setFilename(fileList);
|
||||||
DragFileList dragFileList;
|
DragFileList dragFileList;
|
||||||
|
@ -881,7 +881,7 @@ OSXScreen::leave()
|
||||||
dragFileList, info);
|
dragFileList, info);
|
||||||
client->sendDragInfo(fileCount, info, info.size());
|
client->sendDragInfo(fileCount, info, info.size());
|
||||||
LOG((CLOG_DEBUG "send dragging file to server"));
|
LOG((CLOG_DEBUG "send dragging file to server"));
|
||||||
|
|
||||||
// TODO: what to do with multiple file or even
|
// TODO: what to do with multiple file or even
|
||||||
// a folder
|
// a folder
|
||||||
client->sendFileToServer(fileList.c_str());
|
client->sendFileToServer(fileList.c_str());
|
||||||
|
@ -889,7 +889,7 @@ OSXScreen::leave()
|
||||||
}
|
}
|
||||||
m_draggingStarted = false;
|
m_draggingStarted = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_isPrimary) {
|
if (m_isPrimary) {
|
||||||
avoidHesitatingCursor();
|
avoidHesitatingCursor();
|
||||||
|
|
||||||
|
@ -906,8 +906,8 @@ OSXScreen::setClipboard(ClipboardID, const IClipboard* src)
|
||||||
{
|
{
|
||||||
if (src != NULL) {
|
if (src != NULL) {
|
||||||
LOG((CLOG_DEBUG "setting clipboard"));
|
LOG((CLOG_DEBUG "setting clipboard"));
|
||||||
Clipboard::copy(&m_pasteboard, src);
|
Clipboard::copy(&m_pasteboard, src);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1036,16 +1036,16 @@ OSXScreen::handleSystemEvent(const Event& event, void*)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kEventClassKeyboard:
|
case kEventClassKeyboard:
|
||||||
switch (GetEventKind(*carbonEvent)) {
|
switch (GetEventKind(*carbonEvent)) {
|
||||||
case kEventHotKeyPressed:
|
case kEventHotKeyPressed:
|
||||||
case kEventHotKeyReleased:
|
case kEventHotKeyReleased:
|
||||||
onHotKey(*carbonEvent);
|
onHotKey(*carbonEvent);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kEventClassWindow:
|
case kEventClassWindow:
|
||||||
// 2nd param was formerly GetWindowEventTarget(m_userInputWindow) which is 32-bit only,
|
// 2nd param was formerly GetWindowEventTarget(m_userInputWindow) which is 32-bit only,
|
||||||
// however as m_userInputWindow is never initialized to anything we can take advantage of
|
// however as m_userInputWindow is never initialized to anything we can take advantage of
|
||||||
|
@ -1076,7 +1076,7 @@ OSXScreen::handleSystemEvent(const Event& event, void*)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
OSXScreen::onMouseMove(CGFloat mx, CGFloat my)
|
OSXScreen::onMouseMove(CGFloat mx, CGFloat my)
|
||||||
{
|
{
|
||||||
LOG((CLOG_DEBUG2 "mouse move %+f,%+f", mx, my));
|
LOG((CLOG_DEBUG2 "mouse move %+f,%+f", mx, my));
|
||||||
|
@ -1140,7 +1140,7 @@ OSXScreen::onMouseMove(CGFloat mx, CGFloat my)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
OSXScreen::onMouseButton(bool pressed, UInt16 macButton)
|
OSXScreen::onMouseButton(bool pressed, UInt16 macButton)
|
||||||
{
|
{
|
||||||
// Buttons 2 and 3 are inverted on the mac
|
// Buttons 2 and 3 are inverted on the mac
|
||||||
|
@ -1176,7 +1176,7 @@ OSXScreen::onMouseButton(bool pressed, UInt16 macButton)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (macButton == kButtonLeft) {
|
if (macButton == kButtonLeft) {
|
||||||
EMouseButtonState state = pressed ? kMouseButtonDown : kMouseButtonUp;
|
EMouseButtonState state = pressed ? kMouseButtonDown : kMouseButtonUp;
|
||||||
m_buttonState.set(kButtonLeft - 1, state);
|
m_buttonState.set(kButtonLeft - 1, state);
|
||||||
|
@ -1189,7 +1189,7 @@ OSXScreen::onMouseButton(bool pressed, UInt16 macButton)
|
||||||
m_getDropTargetThread = new Thread(new TMethodJob<OSXScreen>(
|
m_getDropTargetThread = new Thread(new TMethodJob<OSXScreen>(
|
||||||
this, &OSXScreen::getDropTargetThread));
|
this, &OSXScreen::getDropTargetThread));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_draggingStarted = false;
|
m_draggingStarted = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1218,16 +1218,16 @@ OSXScreen::displayReconfigurationCallback(CGDirectDisplayID displayID, CGDisplay
|
||||||
|
|
||||||
// Closing or opening the lid when an external monitor is
|
// Closing or opening the lid when an external monitor is
|
||||||
// connected causes an kCGDisplayBeginConfigurationFlag event
|
// connected causes an kCGDisplayBeginConfigurationFlag event
|
||||||
CGDisplayChangeSummaryFlags mask = kCGDisplayBeginConfigurationFlag | kCGDisplayMovedFlag |
|
CGDisplayChangeSummaryFlags mask = kCGDisplayBeginConfigurationFlag | kCGDisplayMovedFlag |
|
||||||
kCGDisplaySetModeFlag | kCGDisplayAddFlag | kCGDisplayRemoveFlag |
|
kCGDisplaySetModeFlag | kCGDisplayAddFlag | kCGDisplayRemoveFlag |
|
||||||
kCGDisplayEnabledFlag | kCGDisplayDisabledFlag |
|
kCGDisplayEnabledFlag | kCGDisplayDisabledFlag |
|
||||||
kCGDisplayMirrorFlag | kCGDisplayUnMirrorFlag |
|
kCGDisplayMirrorFlag | kCGDisplayUnMirrorFlag |
|
||||||
kCGDisplayDesktopShapeChangedFlag;
|
kCGDisplayDesktopShapeChangedFlag;
|
||||||
|
|
||||||
LOG((CLOG_DEBUG1 "event: display was reconfigured: %x %x %x", flags, mask, flags & mask));
|
LOG((CLOG_DEBUG1 "event: display was reconfigured: %x %x %x", flags, mask, flags & mask));
|
||||||
|
|
||||||
if (flags & mask) { /* Something actually did change */
|
if (flags & mask) { /* Something actually did change */
|
||||||
|
|
||||||
LOG((CLOG_DEBUG1 "event: screen changed shape; refreshing dimensions"));
|
LOG((CLOG_DEBUG1 "event: screen changed shape; refreshing dimensions"));
|
||||||
screen->updateScreenShape(displayID, flags);
|
screen->updateScreenShape(displayID, flags);
|
||||||
}
|
}
|
||||||
|
@ -1274,7 +1274,7 @@ OSXScreen::onKey(CGEventRef event)
|
||||||
m_activeModifierHotKeyMask = 0;
|
m_activeModifierHotKeyMask = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1342,7 +1342,7 @@ OSXScreen::onKey(CGEventRef event)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
OSXScreen::onMediaKey(CGEventRef event)
|
OSXScreen::onMediaKey(CGEventRef event)
|
||||||
{
|
{
|
||||||
KeyID keyID;
|
KeyID keyID;
|
||||||
bool down;
|
bool down;
|
||||||
|
@ -1405,7 +1405,7 @@ OSXScreen::mapBarrierButtonToMac(UInt16 button) const
|
||||||
return static_cast<ButtonID>(button);
|
return static_cast<ButtonID>(button);
|
||||||
}
|
}
|
||||||
|
|
||||||
ButtonID
|
ButtonID
|
||||||
OSXScreen::mapMacButtonToBarrier(UInt16 macButton) const
|
OSXScreen::mapMacButtonToBarrier(UInt16 macButton) const
|
||||||
{
|
{
|
||||||
switch (macButton) {
|
switch (macButton) {
|
||||||
|
@ -1418,7 +1418,7 @@ OSXScreen::mapMacButtonToBarrier(UInt16 macButton) const
|
||||||
case 3:
|
case 3:
|
||||||
return kButtonMiddle;
|
return kButtonMiddle;
|
||||||
}
|
}
|
||||||
|
|
||||||
return static_cast<ButtonID>(macButton);
|
return static_cast<ButtonID>(macButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1445,8 +1445,8 @@ OSXScreen::getScrollSpeed() const
|
||||||
double scaling = 0.0;
|
double scaling = 0.0;
|
||||||
|
|
||||||
CFPropertyListRef pref = ::CFPreferencesCopyValue(
|
CFPropertyListRef pref = ::CFPreferencesCopyValue(
|
||||||
CFSTR("com.apple.scrollwheel.scaling") ,
|
CFSTR("com.apple.scrollwheel.scaling") ,
|
||||||
kCFPreferencesAnyApplication,
|
kCFPreferencesAnyApplication,
|
||||||
kCFPreferencesCurrentUser,
|
kCFPreferencesCurrentUser,
|
||||||
kCFPreferencesAnyHost);
|
kCFPreferencesAnyHost);
|
||||||
if (pref != NULL) {
|
if (pref != NULL) {
|
||||||
|
@ -1535,7 +1535,7 @@ OSXScreen::updateScreenShape()
|
||||||
if (CGGetActiveDisplayList(0, NULL, &displayCount) != CGDisplayNoErr) {
|
if (CGGetActiveDisplayList(0, NULL, &displayCount) != CGDisplayNoErr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (displayCount == 0) {
|
if (displayCount == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1579,13 +1579,13 @@ OSXScreen::updateScreenShape()
|
||||||
(displayCount == 1) ? "display" : "displays"));
|
(displayCount == 1) ? "display" : "displays"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
|
|
||||||
//
|
//
|
||||||
// FAST USER SWITCH NOTIFICATION SUPPORT
|
// FAST USER SWITCH NOTIFICATION SUPPORT
|
||||||
//
|
//
|
||||||
// OSXScreen::userSwitchCallback(void*)
|
// OSXScreen::userSwitchCallback(void*)
|
||||||
//
|
//
|
||||||
// gets called if a fast user switch occurs
|
// gets called if a fast user switch occurs
|
||||||
//
|
//
|
||||||
|
|
||||||
|
@ -1611,14 +1611,14 @@ OSXScreen::userSwitchCallback(EventHandlerCallRef nextHandler,
|
||||||
return (CallNextEventHandler(nextHandler, theEvent));
|
return (CallNextEventHandler(nextHandler, theEvent));
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
|
|
||||||
//
|
//
|
||||||
// SLEEP/WAKEUP NOTIFICATION SUPPORT
|
// SLEEP/WAKEUP NOTIFICATION SUPPORT
|
||||||
//
|
//
|
||||||
// OSXScreen::watchSystemPowerThread(void*)
|
// OSXScreen::watchSystemPowerThread(void*)
|
||||||
//
|
//
|
||||||
// main of thread monitoring system power (sleep/wakup) using a CFRunLoop
|
// main of thread monitoring system power (sleep/wakeup) using a CFRunLoop
|
||||||
//
|
//
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1641,7 +1641,7 @@ OSXScreen::watchSystemPowerThread(void*)
|
||||||
CFRunLoopAddSource(m_pmRunloop, runloopSourceRef,
|
CFRunLoopAddSource(m_pmRunloop, runloopSourceRef,
|
||||||
kCFRunLoopCommonModes);
|
kCFRunLoopCommonModes);
|
||||||
}
|
}
|
||||||
|
|
||||||
// thread is ready
|
// thread is ready
|
||||||
{
|
{
|
||||||
Lock lock(m_pmMutex);
|
Lock lock(m_pmMutex);
|
||||||
|
@ -1658,15 +1658,15 @@ OSXScreen::watchSystemPowerThread(void*)
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG((CLOG_DEBUG "started watchSystemPowerThread"));
|
LOG((CLOG_DEBUG "started watchSystemPowerThread"));
|
||||||
|
|
||||||
LOG((CLOG_DEBUG "waiting for event loop"));
|
LOG((CLOG_DEBUG "waiting for event loop"));
|
||||||
m_events->waitForReady();
|
m_events->waitForReady();
|
||||||
|
|
||||||
#if defined(MAC_OS_X_VERSION_10_7)
|
#if defined(MAC_OS_X_VERSION_10_7)
|
||||||
{
|
{
|
||||||
Lock lockCarbon(m_carbonLoopMutex);
|
Lock lockCarbon(m_carbonLoopMutex);
|
||||||
if (*m_carbonLoopReady == false) {
|
if (*m_carbonLoopReady == false) {
|
||||||
|
|
||||||
// we signalling carbon loop ready before starting
|
// we signalling carbon loop ready before starting
|
||||||
// unless we know how to do it within the loop
|
// unless we know how to do it within the loop
|
||||||
LOG((CLOG_DEBUG "signalling carbon loop ready"));
|
LOG((CLOG_DEBUG "signalling carbon loop ready"));
|
||||||
|
@ -1676,12 +1676,12 @@ OSXScreen::watchSystemPowerThread(void*)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// start the run loop
|
// start the run loop
|
||||||
LOG((CLOG_DEBUG "starting carbon loop"));
|
LOG((CLOG_DEBUG "starting carbon loop"));
|
||||||
CFRunLoopRun();
|
CFRunLoopRun();
|
||||||
LOG((CLOG_DEBUG "carbon loop has stopped"));
|
LOG((CLOG_DEBUG "carbon loop has stopped"));
|
||||||
|
|
||||||
// cleanup
|
// cleanup
|
||||||
if (notificationPortRef) {
|
if (notificationPortRef) {
|
||||||
CFRunLoopRemoveSource(m_pmRunloop,
|
CFRunLoopRemoveSource(m_pmRunloop,
|
||||||
|
@ -1716,7 +1716,7 @@ OSXScreen::handlePowerChangeRequest(natural_t messageType, void* messageArg)
|
||||||
getEventTarget(), messageArg,
|
getEventTarget(), messageArg,
|
||||||
Event::kDontFreeData));
|
Event::kDontFreeData));
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case kIOMessageSystemHasPoweredOn:
|
case kIOMessageSystemHasPoweredOn:
|
||||||
LOG((CLOG_DEBUG "system wakeup"));
|
LOG((CLOG_DEBUG "system wakeup"));
|
||||||
m_events->addEvent(Event(m_events->forIScreen().resume(),
|
m_events->addEvent(Event(m_events->forIScreen().resume(),
|
||||||
|
@ -1742,16 +1742,16 @@ OSXScreen::handleConfirmSleep(const Event& event, void*)
|
||||||
if (m_pmRootPort != 0) {
|
if (m_pmRootPort != 0) {
|
||||||
// deliver suspend event immediately.
|
// deliver suspend event immediately.
|
||||||
m_events->addEvent(Event(m_events->forIScreen().suspend(),
|
m_events->addEvent(Event(m_events->forIScreen().suspend(),
|
||||||
getEventTarget(), NULL,
|
getEventTarget(), NULL,
|
||||||
Event::kDeliverImmediately));
|
Event::kDeliverImmediately));
|
||||||
|
|
||||||
LOG((CLOG_DEBUG "system will sleep"));
|
LOG((CLOG_DEBUG "system will sleep"));
|
||||||
IOAllowPowerChange(m_pmRootPort, messageArg);
|
IOAllowPowerChange(m_pmRootPort, messageArg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
|
|
||||||
//
|
//
|
||||||
// GLOBAL HOTKEY OPERATING MODE SUPPORT (10.3)
|
// GLOBAL HOTKEY OPERATING MODE SUPPORT (10.3)
|
||||||
|
@ -1941,7 +1941,7 @@ OSXScreen::handleCGInputEvent(CGEventTapProxy proxy,
|
||||||
case kCGEventMouseMoved:
|
case kCGEventMouseMoved:
|
||||||
pos = CGEventGetLocation(event);
|
pos = CGEventGetLocation(event);
|
||||||
screen->onMouseMove(pos.x, pos.y);
|
screen->onMouseMove(pos.x, pos.y);
|
||||||
|
|
||||||
// The system ignores our cursor-centering calls if
|
// The system ignores our cursor-centering calls if
|
||||||
// we don't return the event. This should be harmless,
|
// we don't return the event. This should be harmless,
|
||||||
// but might register as slight movement to other apps
|
// but might register as slight movement to other apps
|
||||||
|
@ -1980,10 +1980,10 @@ OSXScreen::handleCGInputEvent(CGEventTapProxy proxy,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG((CLOG_DEBUG3 "unknown quartz event type: 0x%02x", type));
|
LOG((CLOG_DEBUG3 "unknown quartz event type: 0x%02x", type));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (screen->m_isOnScreen) {
|
if (screen->m_isOnScreen) {
|
||||||
return event;
|
return event;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1992,38 +1992,38 @@ OSXScreen::handleCGInputEvent(CGEventTapProxy proxy,
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
OSXScreen::MouseButtonState::set(UInt32 button, EMouseButtonState state)
|
OSXScreen::MouseButtonState::set(UInt32 button, EMouseButtonState state)
|
||||||
{
|
{
|
||||||
bool newState = (state == kMouseButtonDown);
|
bool newState = (state == kMouseButtonDown);
|
||||||
m_buttons.set(button, newState);
|
m_buttons.set(button, newState);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
OSXScreen::MouseButtonState::any()
|
OSXScreen::MouseButtonState::any()
|
||||||
{
|
{
|
||||||
return m_buttons.any();
|
return m_buttons.any();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
OSXScreen::MouseButtonState::reset()
|
OSXScreen::MouseButtonState::reset()
|
||||||
{
|
{
|
||||||
m_buttons.reset();
|
m_buttons.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
OSXScreen::MouseButtonState::overwrite(UInt32 buttons)
|
OSXScreen::MouseButtonState::overwrite(UInt32 buttons)
|
||||||
{
|
{
|
||||||
m_buttons = std::bitset<NumButtonIDs>(buttons);
|
m_buttons = std::bitset<NumButtonIDs>(buttons);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
OSXScreen::MouseButtonState::test(UInt32 button) const
|
OSXScreen::MouseButtonState::test(UInt32 button) const
|
||||||
{
|
{
|
||||||
return m_buttons.test(button);
|
return m_buttons.test(button);
|
||||||
}
|
}
|
||||||
|
|
||||||
SInt8
|
SInt8
|
||||||
OSXScreen::MouseButtonState::getFirstButtonDown() const
|
OSXScreen::MouseButtonState::getFirstButtonDown() const
|
||||||
{
|
{
|
||||||
if (m_buttons.any()) {
|
if (m_buttons.any()) {
|
||||||
for (unsigned short button = 0; button < m_buttons.size(); button++) {
|
for (unsigned short button = 0; button < m_buttons.size(); button++) {
|
||||||
|
@ -2041,7 +2041,7 @@ OSXScreen::CFStringRefToUTF8String(CFStringRef aString)
|
||||||
if (aString == NULL) {
|
if (aString == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
CFIndex length = CFStringGetLength(aString);
|
CFIndex length = CFStringGetLength(aString);
|
||||||
CFIndex maxSize = CFStringGetMaximumSizeForEncoding(
|
CFIndex maxSize = CFStringGetMaximumSizeForEncoding(
|
||||||
length,
|
length,
|
||||||
|
|
|
@ -115,7 +115,7 @@ private:
|
||||||
// the X display
|
// the X display
|
||||||
Display* m_display;
|
Display* m_display;
|
||||||
|
|
||||||
// window to receive xscreensaver repsonses
|
// window to receive xscreensaver responses
|
||||||
Window m_xscreensaverSink;
|
Window m_xscreensaverSink;
|
||||||
|
|
||||||
// the target for the events we generate
|
// the target for the events we generate
|
||||||
|
|
|
@ -1136,9 +1136,9 @@ Server::processOptions()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_switchNeedsShift = false; // it seems if i don't add these
|
m_switchNeedsShift = false; // it seems if I don't add these
|
||||||
m_switchNeedsControl = false; // lines, the 'reload config' option
|
m_switchNeedsControl = false; // lines, the 'reload config' option
|
||||||
m_switchNeedsAlt = false; // doesnt' work correct.
|
m_switchNeedsAlt = false; // doesn't work correct.
|
||||||
|
|
||||||
bool newRelativeMoves = m_relativeMoves;
|
bool newRelativeMoves = m_relativeMoves;
|
||||||
for (Config::ScreenOptions::const_iterator index = options->begin();
|
for (Config::ScreenOptions::const_iterator index = options->begin();
|
||||||
|
|
|
@ -167,7 +167,7 @@ public:
|
||||||
*/
|
*/
|
||||||
void getClients(std::vector<std::string>& list) const;
|
void getClients(std::vector<std::string>& list) const;
|
||||||
|
|
||||||
//! Return true if recieved file size is valid
|
//! Return true if received file size is valid
|
||||||
bool isReceivedFileSizeValid();
|
bool isReceivedFileSizeValid();
|
||||||
|
|
||||||
//! Return expected file data size
|
//! Return expected file data size
|
||||||
|
@ -357,7 +357,7 @@ private:
|
||||||
// force the cursor off of \p client
|
// force the cursor off of \p client
|
||||||
void forceLeaveClient(BaseClientProxy* client);
|
void forceLeaveClient(BaseClientProxy* client);
|
||||||
|
|
||||||
// thread funciton for sending file
|
// thread function for sending file
|
||||||
void sendFileThread(void*);
|
void sendFileThread(void*);
|
||||||
|
|
||||||
// thread function for writing file to drop directory
|
// thread function for writing file to drop directory
|
||||||
|
|
Loading…
Reference in New Issue