Updates to support OS X. This improves support for building on
multiple systems with automake, with X Windows and Carbon window system APIs supported. It's also a starting port for supporting win32 builds using mingw. OS X support is incomplete; the tree will compile and link but the binaries will not function.
This commit is contained in:
parent
619dd75f0d
commit
530be3ff9d
42
PORTING
42
PORTING
|
@ -333,16 +333,25 @@ other files. On Unix, synergy uses autoconf/automake which produces
|
||||||
a `configure' script that generates makefiles. On Windows, synergy
|
a `configure' script that generates makefiles. On Windows, synergy
|
||||||
uses Visual C++ workspace and project files. If you're porting to
|
uses Visual C++ workspace and project files. If you're porting to
|
||||||
another Unix variant, you may need to adjust `configure.in',
|
another Unix variant, you may need to adjust `configure.in',
|
||||||
`acinclude.m4', and Unix flavor dependent code in lib/arch.
|
`acinclude.m4', and Unix flavor dependent code in lib/arch. Note
|
||||||
|
especially the SYSAPI_* and WINAPI_* macro definitions in
|
||||||
|
ARCH_CFLAGS. Exactly one of each must be defined. It should also
|
||||||
|
add AM_CONDITIONALs if a new SYSAPI_* or WINAPI_* was added.
|
||||||
|
|
||||||
Adjusting lib/common/common.h:
|
Adjusting lib/common/common.h:
|
||||||
|
|
||||||
The lib/common/common.h header file is included directly or indirectly
|
The lib/common/common.h header file is included directly or indirectly
|
||||||
by every other file. It prepares some platform dependent macros for
|
by every other file. Its primary job is to include config.h, which
|
||||||
integer sizes and defines a macro for conveniently testing which
|
defines macros depending on what the 'configure' script discovered
|
||||||
platform we're building on. That macro is named *_LIKE (e.g. UNIX_LIKE)
|
about the system. If the platform does not use the 'configure' script
|
||||||
and has the value `1'. Exactly one *_LIKE macro must be defined by
|
it must define the appropriate SYSAPI_* and WINAPI_* macro. It may
|
||||||
common.h.
|
also do other platform specific setup.
|
||||||
|
|
||||||
|
Adjusting lib/common/BasicTypes.h:
|
||||||
|
|
||||||
|
No changes should be necessary in BasicTypes.h. However, if the
|
||||||
|
platform's system header files define SInt8, et al. you may need
|
||||||
|
to adjust the typedefs to match the system's definitions.
|
||||||
|
|
||||||
Implementing lib/arch:
|
Implementing lib/arch:
|
||||||
|
|
||||||
|
@ -355,6 +364,18 @@ CArchMiscXXX where XXX is the platform name. The class should have
|
||||||
only static methods. Clients can include the appropriate header
|
only static methods. Clients can include the appropriate header
|
||||||
file and make calls directly, surrounded by a suitable #ifdef/#endif.
|
file and make calls directly, surrounded by a suitable #ifdef/#endif.
|
||||||
|
|
||||||
|
If using automake, the Makefile.am should list the system specific
|
||||||
|
files in a XXX_SOURCE_FILES macro where XXX matches the appropriate
|
||||||
|
AM_CONDITIONAL symbol. XXX_SOURCE_FILES must be added to EXTRA_DIST
|
||||||
|
and the following added above the INCLUDES macro:
|
||||||
|
|
||||||
|
if XXX
|
||||||
|
libarch_a_SOURCES = \
|
||||||
|
$(COMMON_SOURCE_FILES) \
|
||||||
|
$(XXX_SOURCE_FILES) \
|
||||||
|
$(NULL)
|
||||||
|
endif
|
||||||
|
|
||||||
Implementing lib/platform:
|
Implementing lib/platform:
|
||||||
|
|
||||||
Most of the remaining platform dependent code lives in lib/platform.
|
Most of the remaining platform dependent code lives in lib/platform.
|
||||||
|
@ -381,6 +402,15 @@ classes should be derived and implemented:
|
||||||
* CXXXScreenSaver : IScreenSaver
|
* CXXXScreenSaver : IScreenSaver
|
||||||
Provides screen saver operations.
|
Provides screen saver operations.
|
||||||
|
|
||||||
|
If using automake, the Makefile.am should list the window system
|
||||||
|
specific files in a XXX_SOURCE_FILES macro where XXX matches the
|
||||||
|
appropriate AM_CONDITIONAL symbol. XXX_SOURCE_FILES must be added
|
||||||
|
to EXTRA_DIST and the following added above the INCLUDES macro:
|
||||||
|
|
||||||
|
if XXX
|
||||||
|
libplatform_a_SOURCES = $(XXX_SOURCE_FILES)
|
||||||
|
endif
|
||||||
|
|
||||||
Tweaks:
|
Tweaks:
|
||||||
|
|
||||||
Finally, each platform typically requires various adjustments here
|
Finally, each platform typically requires various adjustments here
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2004 Chris Schoeneman
|
||||||
|
*
|
||||||
|
* This package is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* found in the file COPYING that should have accompanied this file.
|
||||||
|
*
|
||||||
|
* This package is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "COSXClientTaskBarReceiver.h"
|
||||||
|
#include "CArch.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// COSXClientTaskBarReceiver
|
||||||
|
//
|
||||||
|
|
||||||
|
COSXClientTaskBarReceiver::COSXClientTaskBarReceiver(
|
||||||
|
const CBufferedLogOutputter*)
|
||||||
|
{
|
||||||
|
// add ourself to the task bar
|
||||||
|
ARCH->addReceiver(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
COSXClientTaskBarReceiver::~COSXClientTaskBarReceiver()
|
||||||
|
{
|
||||||
|
ARCH->removeReceiver(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXClientTaskBarReceiver::showStatus()
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXClientTaskBarReceiver::runMenu(int, int)
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXClientTaskBarReceiver::primaryAction()
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
const IArchTaskBarReceiver::Icon
|
||||||
|
COSXClientTaskBarReceiver::getIcon() const
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2004 Chris Schoeneman
|
||||||
|
*
|
||||||
|
* This package is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* found in the file COPYING that should have accompanied this file.
|
||||||
|
*
|
||||||
|
* This package is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef COSXCLIENTTASKBARRECEIVER_H
|
||||||
|
#define COSXCLIENTTASKBARRECEIVER_H
|
||||||
|
|
||||||
|
#include "CClientTaskBarReceiver.h"
|
||||||
|
|
||||||
|
class CBufferedLogOutputter;
|
||||||
|
|
||||||
|
//! Implementation of CClientTaskBarReceiver for OS X
|
||||||
|
class COSXClientTaskBarReceiver : public CClientTaskBarReceiver {
|
||||||
|
public:
|
||||||
|
COSXClientTaskBarReceiver(const CBufferedLogOutputter*);
|
||||||
|
virtual ~COSXClientTaskBarReceiver();
|
||||||
|
|
||||||
|
// IArchTaskBarReceiver overrides
|
||||||
|
virtual void showStatus();
|
||||||
|
virtual void runMenu(int x, int y);
|
||||||
|
virtual void primaryAction();
|
||||||
|
virtual const Icon getIcon() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -13,17 +13,36 @@
|
||||||
## Process this file with automake to produce Makefile.in
|
## Process this file with automake to produce Makefile.in
|
||||||
NULL =
|
NULL =
|
||||||
|
|
||||||
EXTRA_DIST = \
|
COMMON_SOURCE_FILES = \
|
||||||
|
CClientTaskBarReceiver.cpp \
|
||||||
|
CClientTaskBarReceiver.h \
|
||||||
|
synergyc.cpp \
|
||||||
|
$(NULL)
|
||||||
|
XWINDOWS_SOURCE_FILES = \
|
||||||
|
CXWindowsClientTaskBarReceiver.cpp \
|
||||||
|
CXWindowsClientTaskBarReceiver.h \
|
||||||
|
$(NULL)
|
||||||
|
MSWINDOWS_SOURCE_FILES = \
|
||||||
CMSWindowsClientTaskBarReceiver.cpp \
|
CMSWindowsClientTaskBarReceiver.cpp \
|
||||||
CMSWindowsClientTaskBarReceiver.h \
|
CMSWindowsClientTaskBarReceiver.h \
|
||||||
resource.h \
|
resource.h \
|
||||||
|
synergyc.rc \
|
||||||
|
$(NULL)
|
||||||
|
CARBON_SOURCE_FILES = \
|
||||||
|
COSXClientTaskBarReceiver.cpp \
|
||||||
|
COSXClientTaskBarReceiver.h \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
synergyc.dsp \
|
synergyc.dsp \
|
||||||
synergyc.ico \
|
synergyc.ico \
|
||||||
synergyc.rc \
|
|
||||||
tb_error.ico \
|
tb_error.ico \
|
||||||
tb_idle.ico \
|
tb_idle.ico \
|
||||||
tb_run.ico \
|
tb_run.ico \
|
||||||
tb_wait.ico \
|
tb_wait.ico \
|
||||||
|
$(XWINDOWS_SOURCE_FILES) \
|
||||||
|
$(MSWINDOWS_SOURCE_FILES) \
|
||||||
|
$(CARBON_SOURCE_FILES) \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
MAINTAINERCLEANFILES = \
|
MAINTAINERCLEANFILES = \
|
||||||
|
@ -31,13 +50,24 @@ MAINTAINERCLEANFILES = \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
bin_PROGRAMS = synergyc
|
bin_PROGRAMS = synergyc
|
||||||
|
if XWINDOWS
|
||||||
synergyc_SOURCES = \
|
synergyc_SOURCES = \
|
||||||
CClientTaskBarReceiver.cpp \
|
$(COMMON_SOURCE_FILES) \
|
||||||
CClientTaskBarReceiver.h \
|
$(XWINDOWS_SOURCE_FILES) \
|
||||||
CXWindowsClientTaskBarReceiver.cpp \
|
|
||||||
CXWindowsClientTaskBarReceiver.h \
|
|
||||||
synergyc.cpp \
|
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
endif
|
||||||
|
if MSWINDOWS
|
||||||
|
synergyc_SOURCES = \
|
||||||
|
$(COMMON_SOURCE_FILES) \
|
||||||
|
$(MSWINDOWS_SOURCE_FILES) \
|
||||||
|
$(NULL)
|
||||||
|
endif
|
||||||
|
if CARBON
|
||||||
|
synergyc_SOURCES = \
|
||||||
|
$(COMMON_SOURCE_FILES) \
|
||||||
|
$(CARBON_SOURCE_FILES) \
|
||||||
|
$(NULL)
|
||||||
|
endif
|
||||||
synergyc_LDADD = \
|
synergyc_LDADD = \
|
||||||
$(top_builddir)/lib/client/libclient.a \
|
$(top_builddir)/lib/client/libclient.a \
|
||||||
$(top_builddir)/lib/platform/libplatform.a \
|
$(top_builddir)/lib/platform/libplatform.a \
|
||||||
|
@ -48,12 +78,6 @@ synergyc_LDADD = \
|
||||||
$(top_builddir)/lib/base/libbase.a \
|
$(top_builddir)/lib/base/libbase.a \
|
||||||
$(top_builddir)/lib/common/libcommon.a \
|
$(top_builddir)/lib/common/libcommon.a \
|
||||||
$(top_builddir)/lib/arch/libarch.a \
|
$(top_builddir)/lib/arch/libarch.a \
|
||||||
$(X_LIBS) \
|
|
||||||
$(X_PRE_LIBS) \
|
|
||||||
-lXtst \
|
|
||||||
-lXext \
|
|
||||||
-lX11 \
|
|
||||||
$(X_EXTRA_LIBS) \
|
|
||||||
$(NULL)
|
$(NULL)
|
||||||
INCLUDES = \
|
INCLUDES = \
|
||||||
-I$(top_srcdir)/lib/common \
|
-I$(top_srcdir)/lib/common \
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
#define DAEMON_RUNNING(running_)
|
#define DAEMON_RUNNING(running_)
|
||||||
#if WINDOWS_LIKE
|
#if WINAPI_MSWINDOWS
|
||||||
#include "CArchMiscWindows.h"
|
#include "CArchMiscWindows.h"
|
||||||
#include "CMSWindowsScreen.h"
|
#include "CMSWindowsScreen.h"
|
||||||
#include "CMSWindowsUtil.h"
|
#include "CMSWindowsUtil.h"
|
||||||
|
@ -42,22 +42,25 @@
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
#undef DAEMON_RUNNING
|
#undef DAEMON_RUNNING
|
||||||
#define DAEMON_RUNNING(running_) CArchMiscWindows::daemonRunning(running_)
|
#define DAEMON_RUNNING(running_) CArchMiscWindows::daemonRunning(running_)
|
||||||
#elif UNIX_LIKE
|
#elif WINAPI_XWINDOWS
|
||||||
#include "CXWindowsScreen.h"
|
#include "CXWindowsScreen.h"
|
||||||
#include "CXWindowsClientTaskBarReceiver.h"
|
#include "CXWindowsClientTaskBarReceiver.h"
|
||||||
|
#elif WINAPI_CARBON
|
||||||
|
#include "COSXScreen.h"
|
||||||
|
#include "COSXClientTaskBarReceiver.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// platform dependent name of a daemon
|
// platform dependent name of a daemon
|
||||||
#if WINDOWS_LIKE
|
#if SYSAPI_WIN32
|
||||||
#define DAEMON_NAME "Synergy Client"
|
#define DAEMON_NAME "Synergy Client"
|
||||||
#elif UNIX_LIKE
|
#elif SYSAPI_UNIX
|
||||||
#define DAEMON_NAME "synergyc"
|
#define DAEMON_NAME "synergyc"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef int (*StartupFunc)(int, char**);
|
typedef int (*StartupFunc)(int, char**);
|
||||||
static bool startClient();
|
static bool startClient();
|
||||||
static void parse(int argc, const char* const* argv);
|
static void parse(int argc, const char* const* argv);
|
||||||
#if WINDOWS_LIKE
|
#if WINAPI_MSWINDOWS
|
||||||
static void handleSystemSuspend(void*);
|
static void handleSystemSuspend(void*);
|
||||||
static void handleSystemResume(void*);
|
static void handleSystemResume(void*);
|
||||||
#endif
|
#endif
|
||||||
|
@ -102,12 +105,14 @@ static
|
||||||
CScreen*
|
CScreen*
|
||||||
createScreen()
|
createScreen()
|
||||||
{
|
{
|
||||||
#if WINDOWS_LIKE
|
#if WINAPI_MSWINDOWS
|
||||||
return new CScreen(new CMSWindowsScreen(false,
|
return new CScreen(new CMSWindowsScreen(false,
|
||||||
new CFunctionJob(&handleSystemSuspend),
|
new CFunctionJob(&handleSystemSuspend),
|
||||||
new CFunctionJob(&handleSystemResume)));
|
new CFunctionJob(&handleSystemResume)));
|
||||||
#elif UNIX_LIKE
|
#elif WINAPI_XWINDOWS
|
||||||
return new CScreen(new CXWindowsScreen(false));
|
return new CScreen(new CXWindowsScreen(false));
|
||||||
|
#elif WINAPI_CARBON
|
||||||
|
return new CScreen(new COSXScreen(false));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,11 +120,13 @@ static
|
||||||
CClientTaskBarReceiver*
|
CClientTaskBarReceiver*
|
||||||
createTaskBarReceiver(const CBufferedLogOutputter* logBuffer)
|
createTaskBarReceiver(const CBufferedLogOutputter* logBuffer)
|
||||||
{
|
{
|
||||||
#if WINDOWS_LIKE
|
#if WINAPI_MSWINDOWS
|
||||||
return new CMSWindowsClientTaskBarReceiver(
|
return new CMSWindowsClientTaskBarReceiver(
|
||||||
CMSWindowsScreen::getInstance(), logBuffer);
|
CMSWindowsScreen::getInstance(), logBuffer);
|
||||||
#elif UNIX_LIKE
|
#elif WINAPI_XWINDOWS
|
||||||
return new CXWindowsClientTaskBarReceiver(logBuffer);
|
return new CXWindowsClientTaskBarReceiver(logBuffer);
|
||||||
|
#elif WINAPI_CARBON
|
||||||
|
return new COSXClientTaskBarReceiver(logBuffer);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,7 +197,7 @@ handleScreenError(const CEvent&, void*)
|
||||||
EVENTQUEUE->addEvent(CEvent(CEvent::kQuit));
|
EVENTQUEUE->addEvent(CEvent(CEvent::kQuit));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if WINDOWS_LIKE
|
#if WINAPI_MSWINDOWS
|
||||||
static
|
static
|
||||||
void
|
void
|
||||||
handleSystemSuspend(void*)
|
handleSystemSuspend(void*)
|
||||||
|
@ -676,7 +683,7 @@ parse(int argc, const char* const* argv)
|
||||||
// increase default filter level for daemon. the user must
|
// increase default filter level for daemon. the user must
|
||||||
// explicitly request another level for a daemon.
|
// explicitly request another level for a daemon.
|
||||||
if (ARG->m_daemon && ARG->m_logFilter == NULL) {
|
if (ARG->m_daemon && ARG->m_logFilter == NULL) {
|
||||||
#if WINDOWS_LIKE
|
#if SYSAPI_WIN32
|
||||||
if (CArchMiscWindows::isWindows95Family()) {
|
if (CArchMiscWindows::isWindows95Family()) {
|
||||||
// windows 95 has no place for logging so avoid showing
|
// windows 95 has no place for logging so avoid showing
|
||||||
// the log console window.
|
// the log console window.
|
||||||
|
@ -702,7 +709,7 @@ parse(int argc, const char* const* argv)
|
||||||
// platform dependent entry points
|
// platform dependent entry points
|
||||||
//
|
//
|
||||||
|
|
||||||
#if WINDOWS_LIKE
|
#if SYSAPI_WIN32
|
||||||
|
|
||||||
static bool s_hasImportantLogMessages = false;
|
static bool s_hasImportantLogMessages = false;
|
||||||
|
|
||||||
|
@ -825,7 +832,7 @@ WinMain(HINSTANCE instance, HINSTANCE, LPSTR, int)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif UNIX_LIKE
|
#elif SYSAPI_UNIX
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char** argv)
|
main(int argc, char** argv)
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2004 Chris Schoeneman
|
||||||
|
*
|
||||||
|
* This package is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* found in the file COPYING that should have accompanied this file.
|
||||||
|
*
|
||||||
|
* This package is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "COSXServerTaskBarReceiver.h"
|
||||||
|
#include "CArch.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// COSXServerTaskBarReceiver
|
||||||
|
//
|
||||||
|
|
||||||
|
COSXServerTaskBarReceiver::COSXServerTaskBarReceiver(
|
||||||
|
const CBufferedLogOutputter*)
|
||||||
|
{
|
||||||
|
// add ourself to the task bar
|
||||||
|
ARCH->addReceiver(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
COSXServerTaskBarReceiver::~COSXServerTaskBarReceiver()
|
||||||
|
{
|
||||||
|
ARCH->removeReceiver(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXServerTaskBarReceiver::showStatus()
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXServerTaskBarReceiver::runMenu(int, int)
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXServerTaskBarReceiver::primaryAction()
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
const IArchTaskBarReceiver::Icon
|
||||||
|
COSXServerTaskBarReceiver::getIcon() const
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2004 Chris Schoeneman
|
||||||
|
*
|
||||||
|
* This package is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* found in the file COPYING that should have accompanied this file.
|
||||||
|
*
|
||||||
|
* This package is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef COSXSERVERTASKBARRECEIVER_H
|
||||||
|
#define COSXSERVERTASKBARRECEIVER_H
|
||||||
|
|
||||||
|
#include "CServerTaskBarReceiver.h"
|
||||||
|
|
||||||
|
class CBufferedLogOutputter;
|
||||||
|
|
||||||
|
//! Implementation of CServerTaskBarReceiver for OS X
|
||||||
|
class COSXServerTaskBarReceiver : public CServerTaskBarReceiver {
|
||||||
|
public:
|
||||||
|
COSXServerTaskBarReceiver(const CBufferedLogOutputter*);
|
||||||
|
virtual ~COSXServerTaskBarReceiver();
|
||||||
|
|
||||||
|
// IArchTaskBarReceiver overrides
|
||||||
|
virtual void showStatus();
|
||||||
|
virtual void runMenu(int x, int y);
|
||||||
|
virtual void primaryAction();
|
||||||
|
virtual const Icon getIcon() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -13,17 +13,36 @@
|
||||||
## Process this file with automake to produce Makefile.in
|
## Process this file with automake to produce Makefile.in
|
||||||
NULL =
|
NULL =
|
||||||
|
|
||||||
EXTRA_DIST = \
|
COMMON_SOURCE_FILES = \
|
||||||
|
CServerTaskBarReceiver.cpp \
|
||||||
|
CServerTaskBarReceiver.h \
|
||||||
|
synergys.cpp \
|
||||||
|
$(NULL)
|
||||||
|
XWINDOWS_SOURCE_FILES = \
|
||||||
|
CXWindowsServerTaskBarReceiver.cpp \
|
||||||
|
CXWindowsServerTaskBarReceiver.h \
|
||||||
|
$(NULL)
|
||||||
|
MSWINDOWS_SOURCE_FILES = \
|
||||||
CMSWindowsServerTaskBarReceiver.cpp \
|
CMSWindowsServerTaskBarReceiver.cpp \
|
||||||
CMSWindowsServerTaskBarReceiver.h \
|
CMSWindowsServerTaskBarReceiver.h \
|
||||||
resource.h \
|
resource.h \
|
||||||
synergys.ico \
|
|
||||||
synergys.dsp \
|
|
||||||
synergys.rc \
|
synergys.rc \
|
||||||
|
$(NULL)
|
||||||
|
CARBON_SOURCE_FILES = \
|
||||||
|
COSXServerTaskBarReceiver.cpp \
|
||||||
|
COSXServerTaskBarReceiver.h \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
synergys.dsp \
|
||||||
|
synergys.ico \
|
||||||
tb_error.ico \
|
tb_error.ico \
|
||||||
tb_idle.ico \
|
tb_idle.ico \
|
||||||
tb_run.ico \
|
tb_run.ico \
|
||||||
tb_wait.ico \
|
tb_wait.ico \
|
||||||
|
$(XWINDOWS_SOURCE_FILES) \
|
||||||
|
$(MSWINDOWS_SOURCE_FILES) \
|
||||||
|
$(CARBON_SOURCE_FILES) \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
MAINTAINERCLEANFILES = \
|
MAINTAINERCLEANFILES = \
|
||||||
|
@ -31,13 +50,24 @@ MAINTAINERCLEANFILES = \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
bin_PROGRAMS = synergys
|
bin_PROGRAMS = synergys
|
||||||
|
if XWINDOWS
|
||||||
synergys_SOURCES = \
|
synergys_SOURCES = \
|
||||||
CServerTaskBarReceiver.cpp \
|
$(COMMON_SOURCE_FILES) \
|
||||||
CServerTaskBarReceiver.h \
|
$(XWINDOWS_SOURCE_FILES) \
|
||||||
CXWindowsServerTaskBarReceiver.cpp \
|
|
||||||
CXWindowsServerTaskBarReceiver.h \
|
|
||||||
synergys.cpp \
|
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
endif
|
||||||
|
if MSWINDOWS
|
||||||
|
synergys_SOURCES = \
|
||||||
|
$(COMMON_SOURCE_FILES) \
|
||||||
|
$(MSWINDOWS_SOURCE_FILES) \
|
||||||
|
$(NULL)
|
||||||
|
endif
|
||||||
|
if CARBON
|
||||||
|
synergys_SOURCES = \
|
||||||
|
$(COMMON_SOURCE_FILES) \
|
||||||
|
$(CARBON_SOURCE_FILES) \
|
||||||
|
$(NULL)
|
||||||
|
endif
|
||||||
synergys_LDADD = \
|
synergys_LDADD = \
|
||||||
$(top_builddir)/lib/server/libserver.a \
|
$(top_builddir)/lib/server/libserver.a \
|
||||||
$(top_builddir)/lib/platform/libplatform.a \
|
$(top_builddir)/lib/platform/libplatform.a \
|
||||||
|
@ -48,12 +78,6 @@ synergys_LDADD = \
|
||||||
$(top_builddir)/lib/base/libbase.a \
|
$(top_builddir)/lib/base/libbase.a \
|
||||||
$(top_builddir)/lib/common/libcommon.a \
|
$(top_builddir)/lib/common/libcommon.a \
|
||||||
$(top_builddir)/lib/arch/libarch.a \
|
$(top_builddir)/lib/arch/libarch.a \
|
||||||
$(X_LIBS) \
|
|
||||||
$(X_PRE_LIBS) \
|
|
||||||
-lXtst \
|
|
||||||
-lXext \
|
|
||||||
-lX11 \
|
|
||||||
$(X_EXTRA_LIBS) \
|
|
||||||
$(NULL)
|
$(NULL)
|
||||||
INCLUDES = \
|
INCLUDES = \
|
||||||
-I$(top_srcdir)/lib/common \
|
-I$(top_srcdir)/lib/common \
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
#define DAEMON_RUNNING(running_)
|
#define DAEMON_RUNNING(running_)
|
||||||
#if WINDOWS_LIKE
|
#if WINAPI_MSWINDOWS
|
||||||
#include "CArchMiscWindows.h"
|
#include "CArchMiscWindows.h"
|
||||||
#include "CMSWindowsScreen.h"
|
#include "CMSWindowsScreen.h"
|
||||||
#include "CMSWindowsUtil.h"
|
#include "CMSWindowsUtil.h"
|
||||||
|
@ -45,23 +45,26 @@
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
#undef DAEMON_RUNNING
|
#undef DAEMON_RUNNING
|
||||||
#define DAEMON_RUNNING(running_) CArchMiscWindows::daemonRunning(running_)
|
#define DAEMON_RUNNING(running_) CArchMiscWindows::daemonRunning(running_)
|
||||||
#elif UNIX_LIKE
|
#elif WINAPI_XWINDOWS
|
||||||
#include "CXWindowsScreen.h"
|
#include "CXWindowsScreen.h"
|
||||||
#include "CXWindowsServerTaskBarReceiver.h"
|
#include "CXWindowsServerTaskBarReceiver.h"
|
||||||
|
#elif WINAPI_CARBON
|
||||||
|
#include "COSXScreen.h"
|
||||||
|
#include "COSXServerTaskBarReceiver.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// platform dependent name of a daemon
|
// platform dependent name of a daemon
|
||||||
#if WINDOWS_LIKE
|
#if SYSAPI_WIN32
|
||||||
#define DAEMON_NAME "Synergy Server"
|
#define DAEMON_NAME "Synergy Server"
|
||||||
#elif UNIX_LIKE
|
#elif SYSAPI_UNIX
|
||||||
#define DAEMON_NAME "synergys"
|
#define DAEMON_NAME "synergys"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// configuration file name
|
// configuration file name
|
||||||
#if WINDOWS_LIKE
|
#if SYSAPI_WIN32
|
||||||
#define USR_CONFIG_NAME "synergy.sgc"
|
#define USR_CONFIG_NAME "synergy.sgc"
|
||||||
#define SYS_CONFIG_NAME "synergy.sgc"
|
#define SYS_CONFIG_NAME "synergy.sgc"
|
||||||
#elif UNIX_LIKE
|
#elif SYSAPI_UNIX
|
||||||
#define USR_CONFIG_NAME ".synergy.conf"
|
#define USR_CONFIG_NAME ".synergy.conf"
|
||||||
#define SYS_CONFIG_NAME "synergy.conf"
|
#define SYS_CONFIG_NAME "synergy.conf"
|
||||||
#endif
|
#endif
|
||||||
|
@ -113,10 +116,12 @@ static
|
||||||
CScreen*
|
CScreen*
|
||||||
createScreen()
|
createScreen()
|
||||||
{
|
{
|
||||||
#if WINDOWS_LIKE
|
#if WINAPI_MSWINDOWS
|
||||||
return new CScreen(new CMSWindowsScreen(true, NULL, NULL));
|
return new CScreen(new CMSWindowsScreen(true, NULL, NULL));
|
||||||
#elif UNIX_LIKE
|
#elif WINAPI_XWINDOWS
|
||||||
return new CScreen(new CXWindowsScreen(true));
|
return new CScreen(new CXWindowsScreen(true));
|
||||||
|
#elif WINAPI_CARBON
|
||||||
|
return new CScreen(new COSXScreen(true));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,11 +129,13 @@ static
|
||||||
CServerTaskBarReceiver*
|
CServerTaskBarReceiver*
|
||||||
createTaskBarReceiver(const CBufferedLogOutputter* logBuffer)
|
createTaskBarReceiver(const CBufferedLogOutputter* logBuffer)
|
||||||
{
|
{
|
||||||
#if WINDOWS_LIKE
|
#if WINAPI_MSWINDOWS
|
||||||
return new CMSWindowsServerTaskBarReceiver(
|
return new CMSWindowsServerTaskBarReceiver(
|
||||||
CMSWindowsScreen::getInstance(), logBuffer);
|
CMSWindowsScreen::getInstance(), logBuffer);
|
||||||
#elif UNIX_LIKE
|
#elif WINAPI_XWINDOWS
|
||||||
return new CXWindowsServerTaskBarReceiver(logBuffer);
|
return new CXWindowsServerTaskBarReceiver(logBuffer);
|
||||||
|
#elif WINAPI_CARBON
|
||||||
|
return new COSXServerTaskBarReceiver(logBuffer);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -579,7 +586,7 @@ static
|
||||||
void
|
void
|
||||||
help()
|
help()
|
||||||
{
|
{
|
||||||
#if WINDOWS_LIKE
|
#if SYSAPI_WIN32
|
||||||
|
|
||||||
# define PLATFORM_ARGS \
|
# define PLATFORM_ARGS \
|
||||||
" {--daemon|--no-daemon}"
|
" {--daemon|--no-daemon}"
|
||||||
|
@ -778,7 +785,7 @@ parse(int argc, const char* const* argv)
|
||||||
// increase default filter level for daemon. the user must
|
// increase default filter level for daemon. the user must
|
||||||
// explicitly request another level for a daemon.
|
// explicitly request another level for a daemon.
|
||||||
if (ARG->m_daemon && ARG->m_logFilter == NULL) {
|
if (ARG->m_daemon && ARG->m_logFilter == NULL) {
|
||||||
#if WINDOWS_LIKE
|
#if SYSAPI_WIN32
|
||||||
if (CArchMiscWindows::isWindows95Family()) {
|
if (CArchMiscWindows::isWindows95Family()) {
|
||||||
// windows 95 has no place for logging so avoid showing
|
// windows 95 has no place for logging so avoid showing
|
||||||
// the log console window.
|
// the log console window.
|
||||||
|
@ -870,7 +877,7 @@ loadConfig()
|
||||||
// platform dependent entry points
|
// platform dependent entry points
|
||||||
//
|
//
|
||||||
|
|
||||||
#if WINDOWS_LIKE
|
#if SYSAPI_WIN32
|
||||||
|
|
||||||
static bool s_hasImportantLogMessages = false;
|
static bool s_hasImportantLogMessages = false;
|
||||||
|
|
||||||
|
@ -994,7 +1001,7 @@ WinMain(HINSTANCE instance, HINSTANCE, LPSTR, int)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif UNIX_LIKE
|
#elif SYSAPI_UNIX
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char** argv)
|
main(int argc, char** argv)
|
||||||
|
|
65
configure.in
65
configure.in
|
@ -27,6 +27,33 @@ AM_CONFIG_HEADER(config.h)
|
||||||
|
|
||||||
dnl information on the package
|
dnl information on the package
|
||||||
|
|
||||||
|
dnl decide on platform
|
||||||
|
ARCH_LIBS=""
|
||||||
|
ARCH_CFLAGS=""
|
||||||
|
AC_CANONICAL_HOST
|
||||||
|
case $host in
|
||||||
|
*-*-windows*)
|
||||||
|
acx_host_arch="WIN32"
|
||||||
|
acx_host_winapi="MSWINDOWS"
|
||||||
|
ARCH_CFLAGS="$ARCH_CFLAGS -DSYSAPI_WIN32=1 -DWINAPI_MSWINDOWS=1"
|
||||||
|
;;
|
||||||
|
*-*-darwin*)
|
||||||
|
acx_host_arch="UNIX"
|
||||||
|
acx_host_winapi="CARBON"
|
||||||
|
ARCH_CFLAGS="$ARCH_CFLAGS -DSYSAPI_UNIX=1 -DWINAPI_CARBON=1"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
acx_host_arch="UNIX"
|
||||||
|
acx_host_winapi="XWINDOWS"
|
||||||
|
ARCH_CFLAGS="$ARCH_CFLAGS -DSYSAPI_UNIX=1 -DWINAPI_XWINDOWS=1"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
AM_CONDITIONAL(WIN32, test x$acx_host_arch = xWIN32)
|
||||||
|
AM_CONDITIONAL(UNIX, test x$acx_host_arch = xUNIX)
|
||||||
|
AM_CONDITIONAL(MSWINDOWS, test x$acx_host_winapi = xMSWINDOWS)
|
||||||
|
AM_CONDITIONAL(CARBON, test x$acx_host_winapi = xCARBON)
|
||||||
|
AM_CONDITIONAL(XWINDOWS, test x$acx_host_winapi = xXWINDOWS)
|
||||||
|
|
||||||
dnl checks for programs
|
dnl checks for programs
|
||||||
AC_PROG_CXX
|
AC_PROG_CXX
|
||||||
AC_PROG_RANLIB
|
AC_PROG_RANLIB
|
||||||
|
@ -45,7 +72,14 @@ dnl macros we should do testing with
|
||||||
CXXFLAGS="$CXXFLAGS -D_BSD_SOURCE -D_XOPEN_SOURCE=500"
|
CXXFLAGS="$CXXFLAGS -D_BSD_SOURCE -D_XOPEN_SOURCE=500"
|
||||||
|
|
||||||
dnl checks for libraries
|
dnl checks for libraries
|
||||||
|
if test x"$acx_host_arch" = xUNIX; then
|
||||||
ACX_PTHREAD(,AC_MSG_ERROR(You must have pthreads to compile synergy))
|
ACX_PTHREAD(,AC_MSG_ERROR(You must have pthreads to compile synergy))
|
||||||
|
ARCH_LIBS="$PTHREAD_LIBS $ARCH_LIBS"
|
||||||
|
ARCH_CFLAGS="$ARCH_CFLAGS $PTHREAD_CFLAGS"
|
||||||
|
fi
|
||||||
|
if test x"$acx_host_winapi" = xCARBON; then
|
||||||
|
ARCH_LIBS="-framework Carbon $ARCH_LIBS"
|
||||||
|
fi
|
||||||
ACX_CHECK_NANOSLEEP
|
ACX_CHECK_NANOSLEEP
|
||||||
ACX_CHECK_INET_ATON
|
ACX_CHECK_INET_ATON
|
||||||
|
|
||||||
|
@ -55,14 +89,33 @@ AC_CHECK_HEADERS([unistd.h sys/time.h sys/types.h wchar.h])
|
||||||
AC_CHECK_HEADERS([sys/socket.h sys/select.h])
|
AC_CHECK_HEADERS([sys/socket.h sys/select.h])
|
||||||
AC_CHECK_HEADERS([istream ostream sstream])
|
AC_CHECK_HEADERS([istream ostream sstream])
|
||||||
AC_HEADER_TIME
|
AC_HEADER_TIME
|
||||||
|
if test x"$acx_host_winapi" = xXWINDOWS; then
|
||||||
AC_PATH_X
|
AC_PATH_X
|
||||||
AC_PATH_XTRA
|
AC_PATH_XTRA
|
||||||
save_CPPFLAGS="$CPPFLAGS"
|
save_CPPFLAGS="$CPPFLAGS"
|
||||||
CPPFLAGS="$X_CFLAGS $CPPFLAGS"
|
CPPFLAGS="$X_CFLAGS $CPPFLAGS"
|
||||||
AC_CHECK_HEADERS([X11/extensions/XTest.h])
|
AC_CHECK_LIB(Xtst,
|
||||||
AC_CHECK_LIB(Xinerama, XineramaQueryExtension, AC_CHECK_HEADERS([X11/extensions/Xinerama.h]) [X_LIBS="$X_LIBS -lXinerama"], , [$X_LIBS -lXext -lX11 $X_EXTRA_LIBS])
|
XTestQueryExtension,
|
||||||
AC_CHECK_LIB(Xext, DPMSQueryExtension, AC_CHECK_HEADERS([X11/extensions/dpms.h]) [X_LIBS="$X_LIBS -lXext"], , [$X_LIBS -lX11 $X_EXTRA_LIBS])
|
AC_CHECK_HEADERS([X11/extensions/XTest.h],
|
||||||
|
[X_LIBS="$X_LIBS -lXtst"],
|
||||||
|
AC_MSG_ERROR(Your must have the XTest headers to compile synergy)),
|
||||||
|
AC_MSG_ERROR(You must have the XTest library to build synergy),
|
||||||
|
[$X_LIBS -lXext -lX11 $X_EXTRA_LIBS])
|
||||||
|
AC_CHECK_LIB(Xinerama,
|
||||||
|
XineramaQueryExtension,
|
||||||
|
AC_CHECK_HEADERS([X11/extensions/Xinerama.h],
|
||||||
|
[X_LIBS="$X_LIBS -lXinerama"]),
|
||||||
|
,
|
||||||
|
[$X_LIBS -lXext -lX11 $X_EXTRA_LIBS])
|
||||||
|
AC_CHECK_LIB(Xext,
|
||||||
|
DPMSQueryExtension,
|
||||||
|
AC_CHECK_HEADERS([X11/extensions/dpms.h]),
|
||||||
|
,
|
||||||
|
[$X_LIBS -lX11 $X_EXTRA_LIBS])
|
||||||
CPPFLAGS="$save_CPPFLAGS"
|
CPPFLAGS="$save_CPPFLAGS"
|
||||||
|
ARCH_LIBS="$X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS $ARCH_LIBS"
|
||||||
|
ARCH_CFLAGS="$ARCH_CFLAGS $X_CFLAGS"
|
||||||
|
fi
|
||||||
|
|
||||||
dnl checks for types
|
dnl checks for types
|
||||||
AC_TYPE_SIZE_T
|
AC_TYPE_SIZE_T
|
||||||
|
@ -100,9 +153,9 @@ dnl enable maximum compiler warnings and warnings are errors.
|
||||||
ACX_CXX_WARNINGS
|
ACX_CXX_WARNINGS
|
||||||
ACX_CXX_WARNINGS_ARE_ERRORS
|
ACX_CXX_WARNINGS_ARE_ERRORS
|
||||||
|
|
||||||
dnl adjust variables for X11 and pthreads
|
dnl adjust compiler and linker variables
|
||||||
CXXFLAGS="$CXXFLAGS $SYNERGY_CXXFLAGS $X_CFLAGS $PTHREAD_CFLAGS"
|
CXXFLAGS="$CXXFLAGS $SYNERGY_CXXFLAGS $ARCH_CFLAGS"
|
||||||
LIBS="$NANOSLEEP_LIBS $INET_ATON_LIBS $PTHREAD_LIBS $LIBS"
|
LIBS="$NANOSLEEP_LIBS $INET_ATON_LIBS $ARCH_LIBS $LIBS"
|
||||||
|
|
||||||
AC_OUTPUT([
|
AC_OUTPUT([
|
||||||
Makefile
|
Makefile
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#undef ARCH_TIME
|
#undef ARCH_TIME
|
||||||
|
|
||||||
// include appropriate architecture implementation
|
// include appropriate architecture implementation
|
||||||
#if WINDOWS_LIKE
|
#if SYSAPI_WIN32
|
||||||
# include "CArchConsoleWindows.h"
|
# include "CArchConsoleWindows.h"
|
||||||
# include "CArchDaemonWindows.h"
|
# include "CArchDaemonWindows.h"
|
||||||
# include "CArchFileWindows.h"
|
# include "CArchFileWindows.h"
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
# include "CArchStringWindows.h"
|
# include "CArchStringWindows.h"
|
||||||
# include "CArchTaskBarWindows.h"
|
# include "CArchTaskBarWindows.h"
|
||||||
# include "CArchTimeWindows.h"
|
# include "CArchTimeWindows.h"
|
||||||
#elif UNIX_LIKE
|
#elif SYSAPI_UNIX
|
||||||
# include "CArchConsoleUnix.h"
|
# include "CArchConsoleUnix.h"
|
||||||
# include "CArchDaemonUnix.h"
|
# include "CArchDaemonUnix.h"
|
||||||
# include "CArchFileUnix.h"
|
# include "CArchFileUnix.h"
|
||||||
|
@ -118,7 +118,7 @@ CArch::CArch(ARCH_ARGS* args)
|
||||||
m_daemon = new ARCH_DAEMON;
|
m_daemon = new ARCH_DAEMON;
|
||||||
m_taskbar = new ARCH_TASKBAR(args);
|
m_taskbar = new ARCH_TASKBAR(args);
|
||||||
|
|
||||||
#if WINDOWS_LIKE
|
#if SYSAPI_WIN32
|
||||||
CArchMiscWindows::init();
|
CArchMiscWindows::init();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,9 +20,6 @@
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
// we derive from CArchDaemonNone
|
|
||||||
#include "CArchDaemonNone.cpp"
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// CArchDaemonUnix
|
// CArchDaemonUnix
|
||||||
//
|
//
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "CArchFileUnix.h"
|
#include "CArchFileUnix.h"
|
||||||
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
/*
|
|
||||||
* synergy -- mouse and keyboard sharing utility
|
|
||||||
* Copyright (C) 2002 Chris Schoeneman
|
|
||||||
*
|
|
||||||
* This package is free software you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* found in the file COPYING that should have accompanied this file.
|
|
||||||
*
|
|
||||||
* This package is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
// include appropriate architecture implementation
|
|
||||||
#if WINDOWS_LIKE
|
|
||||||
# include "CArchMiscWindows.cpp"
|
|
||||||
# include "CArchConsoleWindows.cpp"
|
|
||||||
# include "CArchDaemonWindows.cpp"
|
|
||||||
# include "CArchFileWindows.cpp"
|
|
||||||
# include "CArchLogWindows.cpp"
|
|
||||||
# include "CArchMultithreadWindows.cpp"
|
|
||||||
# include "CArchNetworkWinsock.cpp"
|
|
||||||
# include "CArchSleepWindows.cpp"
|
|
||||||
# include "CArchStringWindows.cpp"
|
|
||||||
# include "CArchTaskBarWindows.cpp"
|
|
||||||
# include "CArchTimeWindows.cpp"
|
|
||||||
# include "XArchWindows.cpp"
|
|
||||||
#elif UNIX_LIKE
|
|
||||||
# include "CArchConsoleUnix.cpp"
|
|
||||||
# include "CArchDaemonUnix.cpp"
|
|
||||||
# include "CArchFileUnix.cpp"
|
|
||||||
# include "CArchLogUnix.cpp"
|
|
||||||
# if HAVE_PTHREAD
|
|
||||||
# include "CArchMultithreadPosix.cpp"
|
|
||||||
# endif
|
|
||||||
# include "CArchNetworkBSD.cpp"
|
|
||||||
# include "CArchSleepUnix.cpp"
|
|
||||||
# include "CArchStringUnix.cpp"
|
|
||||||
# include "CArchTaskBarXWindows.cpp"
|
|
||||||
# include "CArchTimeUnix.cpp"
|
|
||||||
# include "XArchUnix.cpp"
|
|
||||||
#endif
|
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
#include "CArchNetworkBSD.h"
|
#include "CArchNetworkBSD.h"
|
||||||
#include "CArch.h"
|
#include "CArch.h"
|
||||||
|
#include "CArchMultithreadPosix.h"
|
||||||
#include "XArchUnix.h"
|
#include "XArchUnix.h"
|
||||||
#if HAVE_SYS_TYPES_H
|
#if HAVE_SYS_TYPES_H
|
||||||
# include <sys/types.h>
|
# include <sys/types.h>
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
#if (HAVE_MBSINIT && HAVE_MBRTOWC && HAVE_WCRTOMB) || WINDOWS_LIKE
|
#if (HAVE_MBSINIT && HAVE_MBRTOWC && HAVE_WCRTOMB) || SYSAPI_WIN32
|
||||||
#include "CMultibyteOS.cpp"
|
#include "CMultibyteOS.cpp"
|
||||||
#else
|
#else
|
||||||
#include "CMultibyteEmu.cpp"
|
#include "CMultibyteEmu.cpp"
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <cwchar>
|
#include <cwchar>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
class CArchMBStateImpl {
|
class CArchMBStateImpl {
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -13,8 +13,50 @@
|
||||||
## Process this file with automake to produce Makefile.in
|
## Process this file with automake to produce Makefile.in
|
||||||
NULL =
|
NULL =
|
||||||
|
|
||||||
EXTRA_DIST = \
|
COMMON_SOURCE_FILES = \
|
||||||
arch.dsp \
|
CArch.cpp \
|
||||||
|
CArchDaemonNone.cpp \
|
||||||
|
CArchDaemonNone.h \
|
||||||
|
XArch.cpp \
|
||||||
|
CArch.h \
|
||||||
|
IArchConsole.h \
|
||||||
|
IArchDaemon.h \
|
||||||
|
IArchFile.h \
|
||||||
|
IArchLog.h \
|
||||||
|
IArchMultithread.h \
|
||||||
|
IArchNetwork.h \
|
||||||
|
IArchSleep.h \
|
||||||
|
IArchString.h \
|
||||||
|
IArchTaskBar.h \
|
||||||
|
IArchTaskBarReceiver.h \
|
||||||
|
IArchTime.h \
|
||||||
|
XArch.h \
|
||||||
|
$(NULL)
|
||||||
|
UNIX_SOURCE_FILES = \
|
||||||
|
CArchConsoleUnix.cpp \
|
||||||
|
CArchDaemonUnix.cpp \
|
||||||
|
CArchFileUnix.cpp \
|
||||||
|
CArchLogUnix.cpp \
|
||||||
|
CArchMultithreadPosix.cpp \
|
||||||
|
CArchNetworkBSD.cpp \
|
||||||
|
CArchSleepUnix.cpp \
|
||||||
|
CArchStringUnix.cpp \
|
||||||
|
CArchTaskBarXWindows.cpp \
|
||||||
|
CArchTimeUnix.cpp \
|
||||||
|
XArchUnix.cpp \
|
||||||
|
CArchConsoleUnix.h \
|
||||||
|
CArchDaemonUnix.h \
|
||||||
|
CArchFileUnix.h \
|
||||||
|
CArchLogUnix.h \
|
||||||
|
CArchMultithreadPosix.h \
|
||||||
|
CArchNetworkBSD.h \
|
||||||
|
CArchSleepUnix.h \
|
||||||
|
CArchStringUnix.h \
|
||||||
|
CArchTaskBarXWindows.h \
|
||||||
|
CArchTimeUnix.h \
|
||||||
|
XArchUnix.h \
|
||||||
|
$(NULL)
|
||||||
|
WIN32_SOURCE_FILES = \
|
||||||
CArchConsoleWindows.cpp \
|
CArchConsoleWindows.cpp \
|
||||||
CArchDaemonWindows.cpp \
|
CArchDaemonWindows.cpp \
|
||||||
CArchFileWindows.cpp \
|
CArchFileWindows.cpp \
|
||||||
|
@ -41,59 +83,33 @@ EXTRA_DIST = \
|
||||||
XArchWindows.h \
|
XArchWindows.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
arch.dsp \
|
||||||
|
CMultibyte.cpp \
|
||||||
|
CMultibyteEmu.cpp \
|
||||||
|
CMultibyteOS.cpp \
|
||||||
|
vsnprintf.cpp \
|
||||||
|
$(UNIX_SOURCE_FILES) \
|
||||||
|
$(WIN32_SOURCE_FILES) \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
MAINTAINERCLEANFILES = \
|
MAINTAINERCLEANFILES = \
|
||||||
Makefile.in \
|
Makefile.in \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
noinst_LIBRARIES = libarch.a
|
noinst_LIBRARIES = libarch.a
|
||||||
|
if UNIX
|
||||||
libarch_a_SOURCES = \
|
libarch_a_SOURCES = \
|
||||||
CArch.cpp \
|
$(COMMON_SOURCE_FILES) \
|
||||||
CArchImpl.cpp \
|
$(UNIX_SOURCE_FILES) \
|
||||||
XArch.cpp \
|
|
||||||
CArch.h \
|
|
||||||
IArchConsole.h \
|
|
||||||
IArchDaemon.h \
|
|
||||||
IArchFile.h \
|
|
||||||
IArchLog.h \
|
|
||||||
IArchMultithread.h \
|
|
||||||
IArchNetwork.h \
|
|
||||||
IArchSleep.h \
|
|
||||||
IArchString.h \
|
|
||||||
IArchTaskBar.h \
|
|
||||||
IArchTaskBarReceiver.h \
|
|
||||||
IArchTime.h \
|
|
||||||
XArch.h \
|
|
||||||
$(NULL)
|
$(NULL)
|
||||||
EXTRA_libarch_a_SOURCES = \
|
endif
|
||||||
CArchConsoleUnix.cpp \
|
if WIN32
|
||||||
CArchDaemonNone.cpp \
|
libarch_a_SOURCES = \
|
||||||
CArchDaemonUnix.cpp \
|
$(COMMON_SOURCE_FILES) \
|
||||||
CArchFileUnix.cpp \
|
$(WIN32_SOURCE_FILES) \
|
||||||
CArchLogUnix.cpp \
|
|
||||||
CArchMultithreadPosix.cpp \
|
|
||||||
CArchNetworkBSD.cpp \
|
|
||||||
CArchSleepUnix.cpp \
|
|
||||||
CArchStringUnix.cpp \
|
|
||||||
CArchTaskBarXWindows.cpp \
|
|
||||||
CArchTimeUnix.cpp \
|
|
||||||
CMultibyte.cpp \
|
|
||||||
CMultibyteOS.cpp \
|
|
||||||
CMultibyteEmu.cpp \
|
|
||||||
XArchUnix.cpp \
|
|
||||||
vsnprintf.cpp \
|
|
||||||
CArchConsoleUnix.h \
|
|
||||||
CArchDaemonNone.h \
|
|
||||||
CArchDaemonUnix.h \
|
|
||||||
CArchFileUnix.h \
|
|
||||||
CArchLogUnix.h \
|
|
||||||
CArchMultithreadPosix.h \
|
|
||||||
CArchNetworkBSD.h \
|
|
||||||
CArchSleepUnix.h \
|
|
||||||
CArchStringUnix.h \
|
|
||||||
CArchTaskBarXWindows.h \
|
|
||||||
CArchTimeUnix.h \
|
|
||||||
XArchUnix.h \
|
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
endif
|
||||||
INCLUDES = \
|
INCLUDES = \
|
||||||
-I$(top_srcdir)/lib/common \
|
-I$(top_srcdir)/lib/common \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
|
@ -28,7 +28,7 @@ ARCH_STRING::vsnprintf(char* str, int size, const char* fmt, va_list ap)
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif UNIX_LIKE // !HAVE_VSNPRINTF
|
#elif SYSAPI_UNIX // !HAVE_VSNPRINTF
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ ARCH_STRING::vsnprintf(char* str, int size, const char* fmt, va_list ap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#else // !HAVE_VSNPRINTF && !UNIX_LIKE
|
#else // !HAVE_VSNPRINTF && !SYSAPI_UNIX
|
||||||
|
|
||||||
#error vsnprintf not implemented
|
#error vsnprintf not implemented
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ it sorts by std::greater, it has a forward iterator through the elements
|
||||||
(which can appear in any order), and its contents can be swapped.
|
(which can appear in any order), and its contents can be swapped.
|
||||||
*/
|
*/
|
||||||
template <class T, class Container = std::vector<T>,
|
template <class T, class Container = std::vector<T>,
|
||||||
#if WINDOWS_LIKE
|
#if defined(_MSC_VER)
|
||||||
class Compare = std::greater<Container::value_type> >
|
class Compare = std::greater<Container::value_type> >
|
||||||
#else
|
#else
|
||||||
class Compare = std::greater<typename Container::value_type> >
|
class Compare = std::greater<typename Container::value_type> >
|
||||||
|
|
|
@ -36,7 +36,8 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(TYPE_OF_SIZE_4)
|
#if !defined(TYPE_OF_SIZE_4)
|
||||||
# if SIZEOF_INT == 4
|
// Carbon defines SInt32 and UInt32 in terms of long
|
||||||
|
# if SIZEOF_INT == 4 && !defined(__APPLE__)
|
||||||
# define TYPE_OF_SIZE_4 int
|
# define TYPE_OF_SIZE_4 int
|
||||||
# else
|
# else
|
||||||
# define TYPE_OF_SIZE_4 long
|
# define TYPE_OF_SIZE_4 long
|
||||||
|
@ -83,5 +84,3 @@ typedef unsigned TYPE_OF_SIZE_4 UInt32;
|
||||||
#undef TYPE_OF_SIZE_4
|
#undef TYPE_OF_SIZE_4
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -19,11 +19,13 @@
|
||||||
|
|
||||||
#if HAVE_CONFIG_H
|
#if HAVE_CONFIG_H
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
#endif
|
#else
|
||||||
|
// we may not have run configure on win32
|
||||||
// check if win32 platform
|
|
||||||
# if defined(_WIN32)
|
# if defined(_WIN32)
|
||||||
# define WINDOWS_LIKE 1
|
# define SYSAPI_WIN32 1
|
||||||
|
# define WINAPI_MSWINDOWS 1
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
// VC++ specific
|
// VC++ specific
|
||||||
#if (_MSC_VER >= 1200)
|
#if (_MSC_VER >= 1200)
|
||||||
|
@ -42,7 +44,6 @@
|
||||||
# pragma warning(disable: 4702) // unreachable code
|
# pragma warning(disable: 4702) // unreachable code
|
||||||
# pragma warning(disable: 4701) // variable maybe used uninitialized
|
# pragma warning(disable: 4701) // variable maybe used uninitialized
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#endif // (_MSC_VER >= 1200)
|
#endif // (_MSC_VER >= 1200)
|
||||||
|
|
||||||
// VC++ has built-in sized types
|
// VC++ has built-in sized types
|
||||||
|
@ -56,11 +57,13 @@
|
||||||
# define SIZE_OF_INT 4
|
# define SIZE_OF_INT 4
|
||||||
# define SIZE_OF_LONG 4
|
# define SIZE_OF_LONG 4
|
||||||
#endif
|
#endif
|
||||||
#endif // defined(_WIN32)
|
|
||||||
|
|
||||||
// unix-like if not like anything else
|
// FIXME -- including fp.h from Carbon.h causes a undefined symbol error
|
||||||
#if (!defined(WINDOWS_LIKE) || WINDOWS_LIKE == 0)
|
// on my build system. the symbol is scalb. since we don't need any
|
||||||
# define UNIX_LIKE 1
|
// math functions we define __FP__, the include guard macro for fp.h, to
|
||||||
|
// prevent fp.h from being included.
|
||||||
|
#if defined(__APPLE__)
|
||||||
|
#define __FP__
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// define NULL
|
// define NULL
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2004 Chris Schoeneman
|
||||||
|
*
|
||||||
|
* This package is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* found in the file COPYING that should have accompanied this file.
|
||||||
|
*
|
||||||
|
* This package is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "COSXClipboard.h"
|
||||||
|
#include <Carbon/Carbon.h>
|
||||||
|
|
||||||
|
// FIXME -- implement this
|
||||||
|
|
||||||
|
//
|
||||||
|
// COSXClipboard
|
||||||
|
//
|
||||||
|
|
||||||
|
COSXClipboard::COSXClipboard()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
COSXClipboard::~COSXClipboard()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
COSXClipboard::empty()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXClipboard::add(EFormat, const CString&)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
COSXClipboard::open(Time) const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXClipboard::close() const
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
IClipboard::Time
|
||||||
|
COSXClipboard::getTime() const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
COSXClipboard::has(EFormat) const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
CString
|
||||||
|
COSXClipboard::get(EFormat) const
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2004 Chris Schoeneman
|
||||||
|
*
|
||||||
|
* This package is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* found in the file COPYING that should have accompanied this file.
|
||||||
|
*
|
||||||
|
* This package is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef COSXCLIPBOARD_H
|
||||||
|
#define COSXCLIPBOARD_H
|
||||||
|
|
||||||
|
#include "IClipboard.h"
|
||||||
|
|
||||||
|
//! OS X clipboard implementation
|
||||||
|
class COSXClipboard : public IClipboard {
|
||||||
|
public:
|
||||||
|
COSXClipboard();
|
||||||
|
virtual ~COSXClipboard();
|
||||||
|
|
||||||
|
// IClipboard overrides
|
||||||
|
virtual bool empty();
|
||||||
|
virtual void add(EFormat, const CString& data);
|
||||||
|
virtual bool open(Time) const;
|
||||||
|
virtual void close() const;
|
||||||
|
virtual Time getTime() const;
|
||||||
|
virtual bool has(EFormat) const;
|
||||||
|
virtual CString get(EFormat) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,76 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2004 Chris Schoeneman
|
||||||
|
*
|
||||||
|
* This package is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* found in the file COPYING that should have accompanied this file.
|
||||||
|
*
|
||||||
|
* This package is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "COSXEventQueueBuffer.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// COSXEventQueueBuffer
|
||||||
|
//
|
||||||
|
|
||||||
|
COSXEventQueueBuffer::COSXEventQueueBuffer()
|
||||||
|
{
|
||||||
|
// FIXME
|
||||||
|
}
|
||||||
|
|
||||||
|
COSXEventQueueBuffer::~COSXEventQueueBuffer()
|
||||||
|
{
|
||||||
|
// FIXME
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXEventQueueBuffer::waitForEvent(double timeout)
|
||||||
|
{
|
||||||
|
EventRef event;
|
||||||
|
ReceiveNextEvent(0, NULL, timeout, false, &event);
|
||||||
|
}
|
||||||
|
|
||||||
|
IEventQueueBuffer::Type
|
||||||
|
COSXEventQueueBuffer::getEvent(CEvent& event, UInt32& dataID)
|
||||||
|
{
|
||||||
|
// FIXME
|
||||||
|
(void)event;
|
||||||
|
(void)dataID;
|
||||||
|
return kNone;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
COSXEventQueueBuffer::addEvent(UInt32 dataID)
|
||||||
|
{
|
||||||
|
// FIXME
|
||||||
|
(void)dataID;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
COSXEventQueueBuffer::isEmpty() const
|
||||||
|
{
|
||||||
|
EventRef event;
|
||||||
|
OSStatus status = ReceiveNextEvent(0, NULL, 0.0, false, &event);
|
||||||
|
return (status != eventLoopTimedOutErr);
|
||||||
|
}
|
||||||
|
|
||||||
|
CEventQueueTimer*
|
||||||
|
COSXEventQueueBuffer::newTimer(double duration, bool oneShot) const
|
||||||
|
{
|
||||||
|
// FIXME
|
||||||
|
(void)duration;
|
||||||
|
(void)oneShot;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXEventQueueBuffer::deleteTimer(CEventQueueTimer*) const
|
||||||
|
{
|
||||||
|
// FIXME
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2004 Chris Schoeneman
|
||||||
|
*
|
||||||
|
* This package is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* found in the file COPYING that should have accompanied this file.
|
||||||
|
*
|
||||||
|
* This package is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef COSXEVENTQUEUEBUFFER_H
|
||||||
|
#define COSXEVENTQUEUEBUFFER_H
|
||||||
|
|
||||||
|
#include "IEventQueueBuffer.h"
|
||||||
|
#include <Carbon/Carbon.h>
|
||||||
|
|
||||||
|
//! Event queue buffer for OS X
|
||||||
|
class COSXEventQueueBuffer : public IEventQueueBuffer {
|
||||||
|
public:
|
||||||
|
COSXEventQueueBuffer();
|
||||||
|
virtual ~COSXEventQueueBuffer();
|
||||||
|
|
||||||
|
// IEventQueueBuffer overrides
|
||||||
|
virtual void waitForEvent(double timeout);
|
||||||
|
virtual Type getEvent(CEvent& event, UInt32& dataID);
|
||||||
|
virtual bool addEvent(UInt32 dataID);
|
||||||
|
virtual bool isEmpty() const;
|
||||||
|
virtual CEventQueueTimer*
|
||||||
|
newTimer(double duration, bool oneShot) const;
|
||||||
|
virtual void deleteTimer(CEventQueueTimer*) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// FIXME
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,294 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2004 Chris Schoeneman
|
||||||
|
*
|
||||||
|
* This package is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* found in the file COPYING that should have accompanied this file.
|
||||||
|
*
|
||||||
|
* This package is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "COSXKeyState.h"
|
||||||
|
#include "CLog.h"
|
||||||
|
|
||||||
|
struct CKeyEntry {
|
||||||
|
public:
|
||||||
|
KeyID m_keyID;
|
||||||
|
KeyButton m_button;
|
||||||
|
};
|
||||||
|
static const CKeyEntry s_keys[] = {
|
||||||
|
/* ASCII */
|
||||||
|
{ ' ', 49 },
|
||||||
|
{ '!', 18 },
|
||||||
|
{ '\"', 39 },
|
||||||
|
{ '#', 20 },
|
||||||
|
{ '$', 21 },
|
||||||
|
{ '%', 23 },
|
||||||
|
{ '&', 26 },
|
||||||
|
{ '\'', 39 },
|
||||||
|
{ '(', 25 },
|
||||||
|
{ ')', 29 },
|
||||||
|
{ '*', 28 },
|
||||||
|
{ '+', 24 },
|
||||||
|
{ ',', 43 },
|
||||||
|
{ '-', 27 },
|
||||||
|
{ '.', 47 },
|
||||||
|
{ '/', 44 },
|
||||||
|
{ '0', 29 },
|
||||||
|
{ '1', 18 },
|
||||||
|
{ '2', 19 },
|
||||||
|
{ '3', 20 },
|
||||||
|
{ '4', 21 },
|
||||||
|
{ '5', 23 },
|
||||||
|
{ '6', 22 },
|
||||||
|
{ '7', 26 },
|
||||||
|
{ '8', 28 },
|
||||||
|
{ '9', 25 },
|
||||||
|
{ ':', 41 },
|
||||||
|
{ ';', 41 },
|
||||||
|
{ '<', 43 },
|
||||||
|
{ '=', 24 },
|
||||||
|
{ '>', 47 },
|
||||||
|
{ '?', 44 },
|
||||||
|
{ '@', 19 },
|
||||||
|
{ 'A', 0 },
|
||||||
|
{ 'B', 11 },
|
||||||
|
{ 'C', 8 },
|
||||||
|
{ 'D', 2 },
|
||||||
|
{ 'E', 14 },
|
||||||
|
{ 'F', 3 },
|
||||||
|
{ 'G', 5 },
|
||||||
|
{ 'H', 4 },
|
||||||
|
{ 'I', 34 },
|
||||||
|
{ 'J', 38 },
|
||||||
|
{ 'K', 40 },
|
||||||
|
{ 'L', 37 },
|
||||||
|
{ 'M', 46 },
|
||||||
|
{ 'N', 45 },
|
||||||
|
{ 'O', 31 },
|
||||||
|
{ 'P', 35 },
|
||||||
|
{ 'Q', 12 },
|
||||||
|
{ 'R', 15 },
|
||||||
|
{ 'S', 1 },
|
||||||
|
{ 'T', 17 },
|
||||||
|
{ 'U', 32 },
|
||||||
|
{ 'V', 9 },
|
||||||
|
{ 'W', 13 },
|
||||||
|
{ 'X', 7 },
|
||||||
|
{ 'Y', 16 },
|
||||||
|
{ 'Z', 6 },
|
||||||
|
{ '[', 33 },
|
||||||
|
{ '\\', 42 },
|
||||||
|
{ ']', 30 },
|
||||||
|
{ '^', 22 },
|
||||||
|
{ '_', 27 },
|
||||||
|
{ '`', 50 },
|
||||||
|
{ 'a', 0 },
|
||||||
|
{ 'b', 11 },
|
||||||
|
{ 'c', 8 },
|
||||||
|
{ 'd', 2 },
|
||||||
|
{ 'e', 14 },
|
||||||
|
{ 'f', 3 },
|
||||||
|
{ 'g', 5 },
|
||||||
|
{ 'h', 4 },
|
||||||
|
{ 'i', 34 },
|
||||||
|
{ 'j', 38 },
|
||||||
|
{ 'k', 40 },
|
||||||
|
{ 'l', 37 },
|
||||||
|
{ 'm', 46 },
|
||||||
|
{ 'n', 45 },
|
||||||
|
{ 'o', 31 },
|
||||||
|
{ 'p', 35 },
|
||||||
|
{ 'q', 12 },
|
||||||
|
{ 'r', 15 },
|
||||||
|
{ 's', 1 },
|
||||||
|
{ 't', 17 },
|
||||||
|
{ 'u', 32 },
|
||||||
|
{ 'v', 9 },
|
||||||
|
{ 'w', 13 },
|
||||||
|
{ 'x', 7 },
|
||||||
|
{ 'y', 16 },
|
||||||
|
{ 'z', 6 },
|
||||||
|
{ '{', 33 },
|
||||||
|
{ '|', 42 },
|
||||||
|
{ '}', 30 },
|
||||||
|
{ '~', 50 },
|
||||||
|
|
||||||
|
/* TTY functions */
|
||||||
|
{ kKeyBackSpace, 51 },
|
||||||
|
{ kKeyTab, 48 },
|
||||||
|
{ kKeyLinefeed, 36 },
|
||||||
|
// { kKeyClear, 0xFFFF },
|
||||||
|
{ kKeyReturn, 36 },
|
||||||
|
{ kKeyPause, 113 },
|
||||||
|
{ kKeyScrollLock, 107 },
|
||||||
|
// { kKeySysReq, 0xFFFF }, /* no mapping on apple */
|
||||||
|
{ kKeyEscape, 53 },
|
||||||
|
{ kKeyDelete, 117 },
|
||||||
|
|
||||||
|
/* cursor control */
|
||||||
|
{ kKeyHome, 115 },
|
||||||
|
{ kKeyLeft, 123 },
|
||||||
|
{ kKeyUp, 126 },
|
||||||
|
{ kKeyRight, 124 },
|
||||||
|
{ kKeyDown, 125 },
|
||||||
|
{ kKeyPageUp, 116 },
|
||||||
|
{ kKeyPageDown, 121 },
|
||||||
|
{ kKeyEnd, 119 },
|
||||||
|
{ kKeyBegin, 115 },
|
||||||
|
|
||||||
|
/* numeric keypad */
|
||||||
|
{ kKeyKP_Space, 49 },
|
||||||
|
{ kKeyKP_0, 82 },
|
||||||
|
{ kKeyKP_1, 83 },
|
||||||
|
{ kKeyKP_2, 84 },
|
||||||
|
{ kKeyKP_3, 85 },
|
||||||
|
{ kKeyKP_4, 86 },
|
||||||
|
{ kKeyKP_5, 87 },
|
||||||
|
{ kKeyKP_6, 88 },
|
||||||
|
{ kKeyKP_7, 89 },
|
||||||
|
{ kKeyKP_8, 91 },
|
||||||
|
{ kKeyKP_9, 92 },
|
||||||
|
{ kKeyKP_Enter, 76 },
|
||||||
|
{ kKeyKP_Decimal, 65 },
|
||||||
|
{ kKeyKP_Add, 69 },
|
||||||
|
{ kKeyKP_Subtract, 78 },
|
||||||
|
{ kKeyKP_Multiply, 67 },
|
||||||
|
{ kKeyKP_Divide, 75 },
|
||||||
|
|
||||||
|
/* Function keys */
|
||||||
|
{ kKeyF1, 122 },
|
||||||
|
{ kKeyF2, 120 },
|
||||||
|
{ kKeyF3, 99 },
|
||||||
|
{ kKeyF4, 118 },
|
||||||
|
{ kKeyF5, 96 },
|
||||||
|
{ kKeyF6, 97 },
|
||||||
|
{ kKeyF7, 98 },
|
||||||
|
{ kKeyF8, 100 },
|
||||||
|
{ kKeyF9, 101 },
|
||||||
|
{ kKeyF10, 109 },
|
||||||
|
{ kKeyF11, 103 },
|
||||||
|
{ kKeyF12, 111 },
|
||||||
|
|
||||||
|
/* Modifier keys */
|
||||||
|
{ kKeyShift_L, 56 },
|
||||||
|
{ kKeyShift_R, 56 },
|
||||||
|
{ kKeyControl_L, 59 },
|
||||||
|
{ kKeyControl_R, 59 },
|
||||||
|
{ kKeyAlt_L, 55 },
|
||||||
|
{ kKeyAlt_R, 55 },
|
||||||
|
{ kKeyCapsLock, 57 },
|
||||||
|
{ kKeyNumLock, 71 },
|
||||||
|
{ kKeyMeta_L, 58 },
|
||||||
|
{ kKeyMeta_R, 58 },
|
||||||
|
{ kKeySuper_L, 58 },
|
||||||
|
{ kKeySuper_R, 58 },
|
||||||
|
{ kKeyLeftTab, 48 }
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// COSXKeyState
|
||||||
|
//
|
||||||
|
|
||||||
|
COSXKeyState::COSXKeyState()
|
||||||
|
{
|
||||||
|
// FIXME
|
||||||
|
}
|
||||||
|
|
||||||
|
COSXKeyState::~COSXKeyState()
|
||||||
|
{
|
||||||
|
// FIXME
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
COSXKeyState::fakeCtrlAltDel()
|
||||||
|
{
|
||||||
|
// pass keys through unchanged
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char*
|
||||||
|
COSXKeyState::getKeyName(KeyButton) const
|
||||||
|
{
|
||||||
|
// FIXME
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXKeyState::doUpdateKeys()
|
||||||
|
{
|
||||||
|
// FIXME -- get the current keyboard state. call setKeyDown(),
|
||||||
|
// setToggled(), and addModifier() as appropriate.
|
||||||
|
|
||||||
|
// save key mapping
|
||||||
|
// FIXME -- this probably needs to be more dynamic to support
|
||||||
|
// non-english keyboards. also need to map modifiers needed
|
||||||
|
// for each KeyID.
|
||||||
|
for (UInt32 i = 0; i < sizeof(s_keys) / sizeof(s_keys[0]); ++i) {
|
||||||
|
m_keyMap.insert(std::make_pair(s_keys[i].m_keyID, s_keys[i].m_button));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXKeyState::doFakeKeyEvent(KeyButton button, bool press, bool)
|
||||||
|
{
|
||||||
|
// let system figure out character for us
|
||||||
|
CGPostKeyboardEvent(0, static_cast<CGKeyCode>(button), press);
|
||||||
|
}
|
||||||
|
|
||||||
|
KeyButton
|
||||||
|
COSXKeyState::mapKey(Keystrokes& keys, KeyID id,
|
||||||
|
KeyModifierMask desiredMask,
|
||||||
|
bool isAutoRepeat) const
|
||||||
|
{
|
||||||
|
// look up virtual key
|
||||||
|
CKeyMap::const_iterator keyIndex = m_keyMap.find(id);
|
||||||
|
if (keyIndex == m_keyMap.end()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
CGKeyCode keyCode = keyIndex->second;
|
||||||
|
|
||||||
|
// adjust the modifiers to match the desired modifiers
|
||||||
|
Keystrokes undo;
|
||||||
|
if (!adjustModifiers(keys, undo, desiredMask)) {
|
||||||
|
LOG((CLOG_DEBUG2 "failed to adjust modifiers"));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// add the key event
|
||||||
|
Keystroke keystroke;
|
||||||
|
keystroke.m_key = keyCode;
|
||||||
|
if (!isAutoRepeat) {
|
||||||
|
keystroke.m_press = true;
|
||||||
|
keystroke.m_repeat = false;
|
||||||
|
keys.push_back(keystroke);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
keystroke.m_press = false;
|
||||||
|
keystroke.m_repeat = true;
|
||||||
|
keys.push_back(keystroke);
|
||||||
|
keystroke.m_press = true;
|
||||||
|
keys.push_back(keystroke);
|
||||||
|
}
|
||||||
|
|
||||||
|
// put undo keystrokes at end of keystrokes in reverse order
|
||||||
|
while (!undo.empty()) {
|
||||||
|
keys.push_back(undo.back());
|
||||||
|
undo.pop_back();
|
||||||
|
}
|
||||||
|
|
||||||
|
return keyCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
COSXKeyState::adjustModifiers(Keystrokes& /*keys*/,
|
||||||
|
Keystrokes& /*undo*/,
|
||||||
|
KeyModifierMask /*desiredMask*/) const
|
||||||
|
{
|
||||||
|
// FIXME -- should add necessary modifier events to keys and undo
|
||||||
|
return true;
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2004 Chris Schoeneman
|
||||||
|
*
|
||||||
|
* This package is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* found in the file COPYING that should have accompanied this file.
|
||||||
|
*
|
||||||
|
* This package is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef COSXKEYSTATE_H
|
||||||
|
#define COSXKEYSTATE_H
|
||||||
|
|
||||||
|
#include "CKeyState.h"
|
||||||
|
#include "stdmap.h"
|
||||||
|
#include <Carbon/Carbon.h>
|
||||||
|
|
||||||
|
//! OS X key state
|
||||||
|
/*!
|
||||||
|
A key state for OS X.
|
||||||
|
*/
|
||||||
|
class COSXKeyState : public CKeyState {
|
||||||
|
public:
|
||||||
|
COSXKeyState();
|
||||||
|
virtual ~COSXKeyState();
|
||||||
|
|
||||||
|
// IKeyState overrides
|
||||||
|
virtual bool fakeCtrlAltDel();
|
||||||
|
virtual const char* getKeyName(KeyButton) const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// IKeyState overrides
|
||||||
|
virtual void doUpdateKeys();
|
||||||
|
virtual void doFakeKeyEvent(KeyButton button,
|
||||||
|
bool press, bool isAutoRepeat);
|
||||||
|
virtual KeyButton mapKey(Keystrokes& keys, KeyID id,
|
||||||
|
KeyModifierMask desiredMask,
|
||||||
|
bool isAutoRepeat) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool adjustModifiers(Keystrokes& keys,
|
||||||
|
Keystrokes& undo,
|
||||||
|
KeyModifierMask desiredMask) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
typedef std::map<KeyID, KeyButton> CKeyMap;
|
||||||
|
|
||||||
|
CKeyMap m_keyMap;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,407 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2004 Chris Schoeneman
|
||||||
|
*
|
||||||
|
* This package is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* found in the file COPYING that should have accompanied this file.
|
||||||
|
*
|
||||||
|
* This package is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "COSXScreen.h"
|
||||||
|
#include "COSXClipboard.h"
|
||||||
|
#include "COSXEventQueueBuffer.h"
|
||||||
|
#include "COSXKeyState.h"
|
||||||
|
#include "COSXScreenSaver.h"
|
||||||
|
#include "CClipboard.h"
|
||||||
|
#include "CLog.h"
|
||||||
|
#include "IEventQueue.h"
|
||||||
|
#include "TMethodEventJob.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// COSXScreen
|
||||||
|
//
|
||||||
|
|
||||||
|
COSXScreen::COSXScreen(bool isPrimary) :
|
||||||
|
m_isPrimary(isPrimary),
|
||||||
|
m_isOnScreen(m_isPrimary),
|
||||||
|
m_cursorHidden(false),
|
||||||
|
m_keyState(NULL),
|
||||||
|
m_sequenceNumber(0),
|
||||||
|
m_screensaver(NULL),
|
||||||
|
m_screensaverNotify(false)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
m_displayID = CGMainDisplayID();
|
||||||
|
updateScreenShape();
|
||||||
|
m_screensaver = new COSXScreenSaver();
|
||||||
|
m_keyState = new COSXKeyState();
|
||||||
|
LOG((CLOG_DEBUG "screen shape: %d,%d %dx%d", m_x, m_y, m_w, m_h));
|
||||||
|
}
|
||||||
|
catch (...) {
|
||||||
|
delete m_keyState;
|
||||||
|
delete m_screensaver;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
// install event handlers
|
||||||
|
EVENTQUEUE->adoptHandler(CEvent::kSystem, IEventQueue::getSystemTarget(),
|
||||||
|
new TMethodEventJob<COSXScreen>(this,
|
||||||
|
&COSXScreen::handleSystemEvent));
|
||||||
|
|
||||||
|
// install the platform event queue
|
||||||
|
EVENTQUEUE->adoptBuffer(new COSXEventQueueBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
COSXScreen::~COSXScreen()
|
||||||
|
{
|
||||||
|
disable();
|
||||||
|
EVENTQUEUE->adoptBuffer(NULL);
|
||||||
|
EVENTQUEUE->removeHandler(CEvent::kSystem, IEventQueue::getSystemTarget());
|
||||||
|
delete m_keyState;
|
||||||
|
delete m_screensaver;
|
||||||
|
}
|
||||||
|
|
||||||
|
void*
|
||||||
|
COSXScreen::getEventTarget() const
|
||||||
|
{
|
||||||
|
return const_cast<COSXScreen*>(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
COSXScreen::getClipboard(ClipboardID, IClipboard* dst) const
|
||||||
|
{
|
||||||
|
COSXClipboard src;
|
||||||
|
CClipboard::copy(dst, &src);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::getShape(SInt32& x, SInt32& y, SInt32& w, SInt32& h) const
|
||||||
|
{
|
||||||
|
x = m_x;
|
||||||
|
y = m_y;
|
||||||
|
w = m_w;
|
||||||
|
h = m_h;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::getCursorPos(SInt32& x, SInt32& y) const
|
||||||
|
{
|
||||||
|
Point mouse;
|
||||||
|
GetGlobalMouse(&mouse);
|
||||||
|
x = mouse.h;
|
||||||
|
y = mouse.v;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::reconfigure(UInt32 activeSides)
|
||||||
|
{
|
||||||
|
// FIXME
|
||||||
|
(void)activeSides;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::warpCursor(SInt32 x, SInt32 y)
|
||||||
|
{
|
||||||
|
// move cursor without generating events
|
||||||
|
CGPoint pos;
|
||||||
|
pos.x = x;
|
||||||
|
pos.y = y;
|
||||||
|
CGWarpMouseCursorPosition(pos);
|
||||||
|
|
||||||
|
// save new cursor position
|
||||||
|
m_xCursor = x;
|
||||||
|
m_yCursor = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
SInt32
|
||||||
|
COSXScreen::getJumpZoneSize() const
|
||||||
|
{
|
||||||
|
// FIXME -- is this correct?
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
COSXScreen::isAnyMouseButtonDown() const
|
||||||
|
{
|
||||||
|
// FIXME
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::getCursorCenter(SInt32& x, SInt32& y) const
|
||||||
|
{
|
||||||
|
x = m_xCenter;
|
||||||
|
y = m_yCenter;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::fakeMouseButton(ButtonID id, bool press) const
|
||||||
|
{
|
||||||
|
// get button index
|
||||||
|
UInt32 index = id - kButtonLeft;
|
||||||
|
if (index >= sizeof(m_buttons) / sizeof(m_buttons[0])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// update state
|
||||||
|
m_buttons[index] = press;
|
||||||
|
|
||||||
|
// synthesize event. CGPostMouseEvent is a particularly good
|
||||||
|
// example of a bad API. we have to shadow the mouse state to
|
||||||
|
// use this API and if we want to support more buttons we have
|
||||||
|
// to recompile.
|
||||||
|
CGPoint pos;
|
||||||
|
pos.x = m_xCursor;
|
||||||
|
pos.y = m_yCursor;
|
||||||
|
CGPostMouseEvent(pos, false, sizeof(m_buttons) / sizeof(m_buttons[0]),
|
||||||
|
m_buttons[0],
|
||||||
|
m_buttons[1],
|
||||||
|
m_buttons[2],
|
||||||
|
m_buttons[3],
|
||||||
|
m_buttons[4]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::fakeMouseMove(SInt32 x, SInt32 y) const
|
||||||
|
{
|
||||||
|
// synthesize event
|
||||||
|
CGPoint pos;
|
||||||
|
pos.x = x;
|
||||||
|
pos.y = y;
|
||||||
|
// FIXME -- is it okay to pass no buttons here?
|
||||||
|
CGPostMouseEvent(pos, true, 0, m_buttons[0]);
|
||||||
|
|
||||||
|
// save new cursor position
|
||||||
|
m_xCursor = x;
|
||||||
|
m_yCursor = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::fakeMouseWheel(SInt32 delta) const
|
||||||
|
{
|
||||||
|
CGPostScrollWheelEvent(1, delta / 120);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::enable()
|
||||||
|
{
|
||||||
|
// FIXME -- install clipboard snooper (if we need one)
|
||||||
|
|
||||||
|
if (m_isPrimary) {
|
||||||
|
// FIXME -- start watching jump zones
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// FIXME -- prevent system from entering power save mode
|
||||||
|
|
||||||
|
// hide cursor
|
||||||
|
if (!m_cursorHidden) {
|
||||||
|
CGDisplayHideCursor(m_displayID);
|
||||||
|
m_cursorHidden = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// warp the mouse to the cursor center
|
||||||
|
fakeMouseMove(m_xCenter, m_yCenter);
|
||||||
|
|
||||||
|
// FIXME -- prepare to show cursor if it moves
|
||||||
|
}
|
||||||
|
|
||||||
|
updateKeys();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::disable()
|
||||||
|
{
|
||||||
|
if (m_isPrimary) {
|
||||||
|
// FIXME -- stop watching jump zones, stop capturing input
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// show cursor
|
||||||
|
if (m_cursorHidden) {
|
||||||
|
CGDisplayShowCursor(m_displayID);
|
||||||
|
m_cursorHidden = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME -- allow system to enter power saving mode
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME -- uninstall clipboard snooper (if we needed one)
|
||||||
|
|
||||||
|
m_isOnScreen = m_isPrimary;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::enter()
|
||||||
|
{
|
||||||
|
if (m_isPrimary) {
|
||||||
|
// FIXME -- stop capturing input, watch jump zones
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// show cursor
|
||||||
|
if (m_cursorHidden) {
|
||||||
|
CGDisplayShowCursor(m_displayID);
|
||||||
|
m_cursorHidden = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// reset buttons
|
||||||
|
for (UInt32 i = 0; i < sizeof(m_buttons) / sizeof(m_buttons[0]); ++i) {
|
||||||
|
m_buttons[i] = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// now on screen
|
||||||
|
m_isOnScreen = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
COSXScreen::leave()
|
||||||
|
{
|
||||||
|
// FIXME -- choose keyboard layout if per-process and activate it here
|
||||||
|
|
||||||
|
if (m_isPrimary) {
|
||||||
|
// update key and button state
|
||||||
|
updateKeys();
|
||||||
|
|
||||||
|
// warp to center
|
||||||
|
warpCursor(m_xCenter, m_yCenter);
|
||||||
|
|
||||||
|
// capture events
|
||||||
|
// FIXME
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// hide cursor
|
||||||
|
if (!m_cursorHidden) {
|
||||||
|
CGDisplayHideCursor(m_displayID);
|
||||||
|
m_cursorHidden = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// warp the mouse to the cursor center
|
||||||
|
fakeMouseMove(m_xCenter, m_yCenter);
|
||||||
|
|
||||||
|
// FIXME -- prepare to show cursor if it moves
|
||||||
|
|
||||||
|
// take keyboard focus
|
||||||
|
// FIXME
|
||||||
|
}
|
||||||
|
|
||||||
|
// now off screen
|
||||||
|
m_isOnScreen = false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
COSXScreen::setClipboard(ClipboardID, const IClipboard* src)
|
||||||
|
{
|
||||||
|
COSXClipboard dst;
|
||||||
|
if (src != NULL) {
|
||||||
|
// save clipboard data
|
||||||
|
return CClipboard::copy(&dst, src);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// assert clipboard ownership
|
||||||
|
if (!dst.open(0)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
dst.empty();
|
||||||
|
dst.close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::checkClipboards()
|
||||||
|
{
|
||||||
|
// FIXME -- do nothing if we're always up to date
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::openScreensaver(bool notify)
|
||||||
|
{
|
||||||
|
m_screensaverNotify = notify;
|
||||||
|
if (!m_screensaverNotify) {
|
||||||
|
m_screensaver->disable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::closeScreensaver()
|
||||||
|
{
|
||||||
|
if (!m_screensaverNotify) {
|
||||||
|
m_screensaver->enable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::screensaver(bool activate)
|
||||||
|
{
|
||||||
|
if (activate) {
|
||||||
|
m_screensaver->activate();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_screensaver->deactivate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::resetOptions()
|
||||||
|
{
|
||||||
|
// no options
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::setOptions(const COptionsList&)
|
||||||
|
{
|
||||||
|
// no options
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::setSequenceNumber(UInt32 seqNum)
|
||||||
|
{
|
||||||
|
m_sequenceNumber = seqNum;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
COSXScreen::isPrimary() const
|
||||||
|
{
|
||||||
|
return m_isPrimary;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::handleSystemEvent(const CEvent&, void*)
|
||||||
|
{
|
||||||
|
// FIXME
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::updateButtons()
|
||||||
|
{
|
||||||
|
// FIXME -- get current button state into m_buttons[]
|
||||||
|
}
|
||||||
|
|
||||||
|
IKeyState*
|
||||||
|
COSXScreen::getKeyState() const
|
||||||
|
{
|
||||||
|
return m_keyState;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreen::updateScreenShape()
|
||||||
|
{
|
||||||
|
// FIXME -- handle multiple monitors
|
||||||
|
|
||||||
|
// get shape of default screen
|
||||||
|
m_x = 0;
|
||||||
|
m_y = 0;
|
||||||
|
m_w = CGDisplayPixelsWide(m_displayID);
|
||||||
|
m_h = CGDisplayPixelsHigh(m_displayID);
|
||||||
|
|
||||||
|
// get center of default screen
|
||||||
|
m_xCenter = m_x + (m_w >> 1);
|
||||||
|
m_yCenter = m_y + (m_h >> 1);
|
||||||
|
}
|
|
@ -0,0 +1,110 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2004 Chris Schoeneman
|
||||||
|
*
|
||||||
|
* This package is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* found in the file COPYING that should have accompanied this file.
|
||||||
|
*
|
||||||
|
* This package is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef COSXSCREEN_H
|
||||||
|
#define COSXSCREEN_H
|
||||||
|
|
||||||
|
#include "CPlatformScreen.h"
|
||||||
|
#include "stdvector.h"
|
||||||
|
#include <Carbon/Carbon.h>
|
||||||
|
|
||||||
|
class COSXKeyState;
|
||||||
|
class COSXScreenSaver;
|
||||||
|
|
||||||
|
//! Implementation of IPlatformScreen for OS X
|
||||||
|
class COSXScreen : public CPlatformScreen {
|
||||||
|
public:
|
||||||
|
COSXScreen(bool isPrimary);
|
||||||
|
virtual ~COSXScreen();
|
||||||
|
|
||||||
|
//! @name manipulators
|
||||||
|
//@{
|
||||||
|
|
||||||
|
//@}
|
||||||
|
|
||||||
|
// IScreen overrides
|
||||||
|
virtual void* getEventTarget() const;
|
||||||
|
virtual bool getClipboard(ClipboardID id, IClipboard*) const;
|
||||||
|
virtual void getShape(SInt32& x, SInt32& y,
|
||||||
|
SInt32& width, SInt32& height) const;
|
||||||
|
virtual void getCursorPos(SInt32& x, SInt32& y) const;
|
||||||
|
|
||||||
|
// IPrimaryScreen overrides
|
||||||
|
virtual void reconfigure(UInt32 activeSides);
|
||||||
|
virtual void warpCursor(SInt32 x, SInt32 y);
|
||||||
|
virtual SInt32 getJumpZoneSize() const;
|
||||||
|
virtual bool isAnyMouseButtonDown() const;
|
||||||
|
virtual void getCursorCenter(SInt32& x, SInt32& y) const;
|
||||||
|
|
||||||
|
// ISecondaryScreen overrides
|
||||||
|
virtual void fakeMouseButton(ButtonID id, bool press) const;
|
||||||
|
virtual void fakeMouseMove(SInt32 x, SInt32 y) const;
|
||||||
|
virtual void fakeMouseWheel(SInt32 delta) const;
|
||||||
|
|
||||||
|
// IPlatformScreen overrides
|
||||||
|
virtual void enable();
|
||||||
|
virtual void disable();
|
||||||
|
virtual void enter();
|
||||||
|
virtual bool leave();
|
||||||
|
virtual bool setClipboard(ClipboardID, const IClipboard*);
|
||||||
|
virtual void checkClipboards();
|
||||||
|
virtual void openScreensaver(bool notify);
|
||||||
|
virtual void closeScreensaver();
|
||||||
|
virtual void screensaver(bool activate);
|
||||||
|
virtual void resetOptions();
|
||||||
|
virtual void setOptions(const COptionsList& options);
|
||||||
|
virtual void setSequenceNumber(UInt32);
|
||||||
|
virtual bool isPrimary() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// IPlatformScreen overrides
|
||||||
|
virtual void handleSystemEvent(const CEvent&, void*);
|
||||||
|
virtual void updateButtons();
|
||||||
|
virtual IKeyState* getKeyState() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void updateScreenShape();
|
||||||
|
|
||||||
|
private:
|
||||||
|
// true if screen is being used as a primary screen, false otherwise
|
||||||
|
bool m_isPrimary;
|
||||||
|
|
||||||
|
// true if mouse has entered the screen
|
||||||
|
bool m_isOnScreen;
|
||||||
|
|
||||||
|
// the display
|
||||||
|
CGDirectDisplayID m_displayID;
|
||||||
|
|
||||||
|
// screen shape stuff
|
||||||
|
SInt32 m_x, m_y;
|
||||||
|
SInt32 m_w, m_h;
|
||||||
|
SInt32 m_xCenter, m_yCenter;
|
||||||
|
|
||||||
|
// mouse state
|
||||||
|
mutable SInt32 m_xCursor, m_yCursor;
|
||||||
|
mutable boolean_t m_buttons[5];
|
||||||
|
bool m_cursorHidden;
|
||||||
|
|
||||||
|
// keyboard stuff
|
||||||
|
COSXKeyState* m_keyState;
|
||||||
|
|
||||||
|
// clipboards
|
||||||
|
UInt32 m_sequenceNumber;
|
||||||
|
|
||||||
|
// screen saver stuff
|
||||||
|
COSXScreenSaver* m_screensaver;
|
||||||
|
bool m_screensaverNotify;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2004 Chris Schoeneman
|
||||||
|
*
|
||||||
|
* This package is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* found in the file COPYING that should have accompanied this file.
|
||||||
|
*
|
||||||
|
* This package is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "COSXScreenSaver.h"
|
||||||
|
#include <Carbon/Carbon.h>
|
||||||
|
|
||||||
|
// FIXME -- implement this
|
||||||
|
|
||||||
|
//
|
||||||
|
// COSXScreenSaver
|
||||||
|
//
|
||||||
|
|
||||||
|
COSXScreenSaver::COSXScreenSaver()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
COSXScreenSaver::~COSXScreenSaver()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreenSaver::enable()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreenSaver::disable()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreenSaver::activate()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COSXScreenSaver::deactivate()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
COSXScreenSaver::isActive() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2002 Chris Schoeneman
|
||||||
|
*
|
||||||
|
* This package is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* found in the file COPYING that should have accompanied this file.
|
||||||
|
*
|
||||||
|
* This package is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef COSXSCREENSAVER_H
|
||||||
|
#define COSXSCREENSAVER_H
|
||||||
|
|
||||||
|
#include "IScreenSaver.h"
|
||||||
|
|
||||||
|
//! OSX screen saver implementation
|
||||||
|
class COSXScreenSaver : public IScreenSaver {
|
||||||
|
public:
|
||||||
|
COSXScreenSaver();
|
||||||
|
virtual ~COSXScreenSaver();
|
||||||
|
|
||||||
|
// IScreenSaver overrides
|
||||||
|
virtual void enable();
|
||||||
|
virtual void disable();
|
||||||
|
virtual void activate();
|
||||||
|
virtual void deactivate();
|
||||||
|
virtual bool isActive() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -16,13 +16,8 @@
|
||||||
#define CSYNERGYHOOK_H
|
#define CSYNERGYHOOK_H
|
||||||
|
|
||||||
#include "BasicTypes.h"
|
#include "BasicTypes.h"
|
||||||
|
|
||||||
#if WINDOWS_LIKE
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#else
|
|
||||||
#error CSynergyHook is a win32 specific file
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(SYNRGYHK_EXPORTS)
|
#if defined(SYNRGYHK_EXPORTS)
|
||||||
#define CSYNERGYHOOK_API __declspec(dllexport)
|
#define CSYNERGYHOOK_API __declspec(dllexport)
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
#include "CThread.h"
|
#include "CThread.h"
|
||||||
#include "CEvent.h"
|
#include "CEvent.h"
|
||||||
#include "IEventQueue.h"
|
#include "IEventQueue.h"
|
||||||
#if UNIX_LIKE
|
|
||||||
#if HAVE_POLL
|
#if HAVE_POLL
|
||||||
# include <sys/poll.h>
|
# include <sys/poll.h>
|
||||||
#else
|
#else
|
||||||
|
@ -33,7 +32,6 @@
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// CEventQueueTimer
|
// CEventQueueTimer
|
||||||
|
|
|
@ -45,24 +45,6 @@
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#if UNIX_LIKE
|
|
||||||
# if HAVE_POLL
|
|
||||||
# include <sys/poll.h>
|
|
||||||
# else
|
|
||||||
# if HAVE_SYS_SELECT_H
|
|
||||||
# include <sys/select.h>
|
|
||||||
# endif
|
|
||||||
# if HAVE_SYS_TIME_H
|
|
||||||
# include <sys/time.h>
|
|
||||||
# endif
|
|
||||||
# if HAVE_SYS_TYPES_H
|
|
||||||
# include <sys/types.h>
|
|
||||||
# endif
|
|
||||||
# if HAVE_UNISTD_H
|
|
||||||
# include <unistd.h>
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#include "CArch.h"
|
#include "CArch.h"
|
||||||
|
|
||||||
// map "Internet" keys to KeyIDs
|
// map "Internet" keys to KeyIDs
|
||||||
|
|
|
@ -13,10 +13,27 @@
|
||||||
## Process this file with automake to produce Makefile.in
|
## Process this file with automake to produce Makefile.in
|
||||||
NULL =
|
NULL =
|
||||||
|
|
||||||
EXTRA_DIST = \
|
XWINDOWS_SOURCE_FILES = \
|
||||||
makehook.dsp \
|
CXWindowsClipboard.cpp \
|
||||||
platform.dsp \
|
CXWindowsClipboardTextConverter.cpp \
|
||||||
synrgyhk.dsp \
|
CXWindowsClipboardUCS2Converter.cpp \
|
||||||
|
CXWindowsClipboardUTF8Converter.cpp \
|
||||||
|
CXWindowsEventQueueBuffer.cpp \
|
||||||
|
CXWindowsKeyState.cpp \
|
||||||
|
CXWindowsScreen.cpp \
|
||||||
|
CXWindowsScreenSaver.cpp \
|
||||||
|
CXWindowsUtil.cpp \
|
||||||
|
CXWindowsClipboard.h \
|
||||||
|
CXWindowsClipboardTextConverter.h \
|
||||||
|
CXWindowsClipboardUCS2Converter.h \
|
||||||
|
CXWindowsClipboardUTF8Converter.h \
|
||||||
|
CXWindowsEventQueueBuffer.h \
|
||||||
|
CXWindowsKeyState.h \
|
||||||
|
CXWindowsScreen.h \
|
||||||
|
CXWindowsScreenSaver.h \
|
||||||
|
CXWindowsUtil.h \
|
||||||
|
$(NULL)
|
||||||
|
MSWINDOWS_SOURCE_FILES = \
|
||||||
CMSWindowsClipboard.cpp \
|
CMSWindowsClipboard.cpp \
|
||||||
CMSWindowsClipboardAnyTextConverter.cpp \
|
CMSWindowsClipboardAnyTextConverter.cpp \
|
||||||
CMSWindowsClipboardTextConverter.cpp \
|
CMSWindowsClipboardTextConverter.cpp \
|
||||||
|
@ -40,32 +57,42 @@ EXTRA_DIST = \
|
||||||
CMSWindowsUtil.h \
|
CMSWindowsUtil.h \
|
||||||
CSynergyHook.h \
|
CSynergyHook.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
CARBON_SOURCE_FILES = \
|
||||||
|
COSXClipboard.cpp \
|
||||||
|
COSXEventQueueBuffer.cpp \
|
||||||
|
COSXKeyState.cpp \
|
||||||
|
COSXScreen.cpp \
|
||||||
|
COSXScreenSaver.cpp \
|
||||||
|
COSXClipboard.h \
|
||||||
|
COSXEventQueueBuffer.h \
|
||||||
|
COSXKeyState.h \
|
||||||
|
COSXScreen.h \
|
||||||
|
COSXScreenSaver.h \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
makehook.dsp \
|
||||||
|
platform.dsp \
|
||||||
|
synrgyhk.dsp \
|
||||||
|
$(XWINDOWS_SOURCE_FILES) \
|
||||||
|
$(MSWINDOWS_SOURCE_FILES) \
|
||||||
|
$(CARBON_SOURCE_FILES) \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
MAINTAINERCLEANFILES = \
|
MAINTAINERCLEANFILES = \
|
||||||
Makefile.in \
|
Makefile.in \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
noinst_LIBRARIES = libplatform.a
|
noinst_LIBRARIES = libplatform.a
|
||||||
libplatform_a_SOURCES = \
|
if XWINDOWS
|
||||||
CXWindowsClipboard.cpp \
|
libplatform_a_SOURCES = $(XWINDOWS_SOURCE_FILES)
|
||||||
CXWindowsClipboardTextConverter.cpp \
|
endif
|
||||||
CXWindowsClipboardUCS2Converter.cpp \
|
if MSWINDOWS
|
||||||
CXWindowsClipboardUTF8Converter.cpp \
|
libplatform_a_SOURCES = $(MSWINDOWS_SOURCE_FILES)
|
||||||
CXWindowsEventQueueBuffer.cpp \
|
endif
|
||||||
CXWindowsKeyState.cpp \
|
if CARBON
|
||||||
CXWindowsScreen.cpp \
|
libplatform_a_SOURCES = $(CARBON_SOURCE_FILES)
|
||||||
CXWindowsScreenSaver.cpp \
|
endif
|
||||||
CXWindowsUtil.cpp \
|
|
||||||
CXWindowsClipboard.h \
|
|
||||||
CXWindowsClipboardTextConverter.h \
|
|
||||||
CXWindowsClipboardUCS2Converter.h \
|
|
||||||
CXWindowsClipboardUTF8Converter.h \
|
|
||||||
CXWindowsEventQueueBuffer.h \
|
|
||||||
CXWindowsKeyState.h \
|
|
||||||
CXWindowsScreen.h \
|
|
||||||
CXWindowsScreenSaver.h \
|
|
||||||
CXWindowsUtil.h \
|
|
||||||
$(NULL)
|
|
||||||
INCLUDES = \
|
INCLUDES = \
|
||||||
-I$(top_srcdir)/lib/common \
|
-I$(top_srcdir)/lib/common \
|
||||||
-I$(top_srcdir)/lib/arch \
|
-I$(top_srcdir)/lib/arch \
|
||||||
|
|
Loading…
Reference in New Issue