Commit Graph

207 Commits

Author SHA1 Message Date
crs 1861f21fb5 Checkpoint. synergys now works. Still need to do lib/client and
synergyc.
2004-02-14 14:04:36 +00:00
crs 4c7e524896 Checkpointing centralized event queue stuff. Currently have:
an event queue and events, TCP sockets converted to use events,
unix multithreading and network stuff converted, and an X Windows
event queue subclass.
2004-01-24 16:09:25 +00:00
crs fa215f1b13 Merged changes from 1.0 branch, including Japanese keyboard
support (thanks to Kazuhide Takahashi).
2003-09-28 11:58:38 +00:00
crs 175843b4fb Changed server side of win32 to send ctrl+alt+<key> if the key
doesn't map to anything via AltGr.  This is an improvement over
the previous code which would simply discard the key but it
still behaves slightly differently than pressing ctrl+alt+<key>
on the server:  if that combination is a hotkey on the server
then the hotkey is performed, even if the combination is also
a valid AltGr combination;  on the client, we'll get the AltGr
combination in preference to the hotkey.
2003-09-08 19:42:00 +00:00
crs f4d7ea3d7b Fixed button mapping. Was returning the physical button instead of
the logical button, but XTest wants the logical button.  Apparently,
the XTest implementation on my mac laptop has it backwards.
2003-09-07 13:08:30 +00:00
crs 6d3c536717 Fixed potential failure to use synergy's keyboard layout when
using low-level keyboard hooks, fixed handling of the global
keyboard layout dead key buffer, fixed identification of dead
keys, fixed synthesis of AltGr (now using right-alt instead
of left-alt), now using VK_DECIMAL for Separator key, fixed
bug where an unmappable key was treated as virtual key 0xff,
and added support for shift-space (shift was being discarded).
Also fixed failure to hide cursor when leaving primary screen
and added support for handling PrintScreen key.
2003-09-06 23:17:41 +00:00
crs 33e359a384 Fixed failure to unlock mutex in CXWindowsScreen::mainLoop()
when returning due to a quit event.
2003-09-03 21:49:57 +00:00
crs a237cbacdb Fixed suppression of auto-repeat for keys that don't auto-repeat.
Had forgotten to query the auto-repeat per-key mask.
2003-09-03 21:22:25 +00:00
crs 9311250c22 Fixed uses of X11 display without mutex held. 2003-09-03 21:21:22 +00:00
crs 47ca409ff9 Merged primary and secondary screens into one class. 2003-09-02 22:05:47 +00:00
crs 4fea7719f3 Merged changes from 1.0 branch. 2003-09-02 21:41:00 +00:00
crs 2f9cdfd1b2 Integrated fixes from 1.0 branch. 2003-08-06 21:09:25 +00:00
crs 221628fd84 Checkpoint refactoring. CSecondaryScreen now does the work common
across platform secondary screens.  X11 screen was compiled and
tested but not the win23 screen.  Will next change inheritance
hierarchy.
2003-07-26 13:41:41 +00:00
crs e1985f52c9 Fixed handling of a dead key followed by space on win32 and X11.
A dead key followed by space should convert the dead key to a
regular character.
2003-07-17 21:16:58 +00:00
crs 0325de2e12 Fixed handling of some non-ASCII but directly mapped characters
on win32.  The o, a, and u with diaeresis in the german keyboard
mapping are examples.
2003-07-16 22:38:43 +00:00
crs 9c4267ed11 Fixed handling of shift/ctrl/alt on special keys on win32 server. 2003-07-16 21:40:57 +00:00
crs 5488b77d61 Fixed handling of some keystrokes on win32. Pressing a dead key
and then space should convert the dead key to a non-dead key but
previous the key was discarded.  Fixed that but VkKeyScan() fails
in this case so added special case to fix that (assuming AltGr is
required).  VkKeyScan() can return the wrong result for characters
that have more than one virtual key mapped to them.  AltGr+9 (^)
on the French layout has this problem.  Now detecting that problem
and using the current keyboard state to decide if AltGr is
required.
2003-07-13 20:42:11 +00:00
crs 745c5421be Changed XSync() to XFlush() in X windows secondary screen. This
doesn't appear to have any negative consequences and may prevent
synergy from freezing when some X client (probably the window
manager) grabs the server.
2003-07-13 16:57:08 +00:00
crs 476faea8ab Prevent INFO level log messages when client is repeatedly trying
to connect.  This prevents a log from filling up while the client
can't connect for no useful reason.  Also removed --camp option
and cleaned up handling of client connection.  Users must now use
--restart instead of --camp.
2003-07-12 17:57:31 +00:00
crs f27fd7b021 Changed windows server to release ctrl and alt keys when it's
sending a key that requires AltGr.  That's because AltGr *is*
ctrl and alt but AltGr should be seen on clients as mode
switch without the ctrl and alt.  I can't think of a better
way to do this other than to not send modifier keystrokes to
the clients at all.
2003-07-08 18:40:46 +00:00
crs 28427a0e9b Keyboard fixes on win32. 2003-07-05 17:04:26 +00:00
crs 8f9cc6e476 Minor X11 keyboard code cleanup. Also now handling KeyPress with
keycode == 0 generated by XFilterEvent() by using the keycode from
the previous KeyPress.
2003-07-05 14:49:08 +00:00
crs 47b480c0bc Compress sequential MappingNotify events into one. 2003-07-05 14:47:41 +00:00
crs 24fc257b3c Rewrote key handling on X11 client. This should fix problems
with applying the incorrect shift and mode switch modifiers to
some keycodes, such as getting Pointer_EnableKeys when pressing
shift with NumLock enabled.
2003-07-01 19:35:28 +00:00
crs 1eab99d70c Added support for input methods. Only handling IMs that don't
need a precompose area or status area.  This includes IMs that
do simple dead key composition.  This only changes the server.
The client still does not decompose a character it cannot
generate directly into the keysyms to compose the character.
2003-06-22 21:27:38 +00:00
crs a6f21bff90 More fixes for X11 client keyboard handling. 2003-06-22 16:39:02 +00:00
crs 92539f2ccc Checkpoint for improving X11 client key handling. Should prevent
unintentional Pointer_EnableKeys (i.e. generating NumLock press
and release around a shift press).
2003-06-22 15:01:44 +00:00
crs 5ca0e026ab Another ctrl+alt+del checkpoint. 2003-06-08 22:20:01 +00:00
crs 784ab183ae ctrl+alt+del emulation checkpoint. 2003-06-08 22:12:12 +00:00
crs 921526ab56 More DEBUG2 level debugging of keyboard handling. 2003-06-08 16:31:52 +00:00
crs 7464e99ba7 Fixed ctrl and alt keys on win32 clients. Was broken by a recent
fix to character handling.
2003-06-02 20:07:16 +00:00
crs 5a65e36c99 Added workaround for broken clipboard owners that report the
type of TARGETS as TARGETS instead of ATOM.
2003-05-26 09:50:35 +00:00
crs af24ae6db7 No longer installing clibboard format for plain text on windows nt
family because nt automatically converts to and from the unicode
format.  This may fix text encoding errors when synergy puts
non-ascii text on the clipboard and other clients prefer CF_TEXT
to CF_UNICODE (which they should not because synergy lists
CF_UNICODE first).
2003-05-26 09:49:38 +00:00
crs 3fc87e7f87 Fixed loss of ctrl+alt+del key releases when the Winlogin desktop
is accessible (was already fixed when inaccessible).  This change
also ignores press and release of virtual key 0, which should never
happen but does according to one user.
2003-05-26 09:46:52 +00:00
crs bdecca0bcc Attempt to improve key event synthesis. This change adds support
for dead keys and attempts to choose the correct code page for the
thread that will (probably) receive synthesized events.
2003-05-20 19:15:58 +00:00
crs dc6652a21a Fixed getting locked to screen after ctrl+alt+del. Also fixed
cursor not being hidden on win32 server when on client screens
(which happened when using low-level hooks).
2003-05-17 20:58:27 +00:00
crs 3fc39eab4e Fixed previous fix. Was trying to avoid using XWarpPointer() when
warping on screen 0.  That just doesn't work if screen 0 is not at
0,0.  So now always use XWarpPointer() if there are multiple
xinerama screens and the appropriate option is enabled.
2003-05-17 14:03:32 +00:00
crs 51919a50e6 Added workaround for when XTest is unaware of Xinerama. When that's
true, faking a mouse motion outside screen 0 is clamped onto screen 0.
When the workaround is enabled, we use XWarpPointer() instead of an
XTest fake motion.  This isn't perfect but the only real fix requires
patching XTest.
2003-05-17 13:44:24 +00:00
crs 92ff58a5af Added support for old versions of XF86keysym.h that are missing
some expected #defines.
2003-05-17 12:48:32 +00:00
crs 0e58bab76c Added support for 4th and 5th (non-mouse-wheel) buttons and
"Internet" keyboard keys.
2003-05-04 21:40:42 +00:00
crs ed439ec33c Added global configuration option to disable screen saver
synchronization.
2003-05-03 14:38:36 +00:00
crs 65de05e3ec Forgot to restore global auto-repeat configuration on exit. 2003-05-03 13:57:52 +00:00
crs 3fc40e1939 Now warping mouse to center of screen when leaving client screens.
Some users requested this.  Also, the hider window is mapped before
warping the mouse so the active window shouldn't change if the focus
policy is point-to-focus.  Showing the window first can also reduce
the likelihood of seeing the cursor briefly in its hidden position.
2003-05-03 13:50:06 +00:00
crs af110dbce2 Now turning off auto-repeat when on an X11 client. This prevents
the server from auto-repeating fake events, which is undesired
since synergy will do the auto-repeating itself.  This also
disables auto-repeat on any keys locally configured on X11 to not
auto-repeat.  That's mainly to suppress auto-repeat on modifier
keys, which auto-repeat on win32 but not X11.
2003-05-03 13:28:21 +00:00
crs 75729cef46 Fixed a few win32 keyboard/mouse problems. First, the mouse hook
now captures non-client area mouse messages.  Previously, these
were ignored (because i forgot about them) and they caused all
kinds of problems because they weren't forwarded.  For example,
clicking on a window border would cause the window to start
resizing when the mouse came back to the server screen.  Moving
inside a title bar meant that the mouse wouldn't move on the
client screen.

Second, because non-client messages are now handled, the full
screen transparent window is no longer necessary to capture
input so it's never displayed.  (The window is still necessary
for clipboard ownership so it's still created.)  No transparent
window means no screen flashing.  It also means we don't have to
become the foreground and active window.  This plays better with
apps that minimize or restore when they're no longer the
foreground application/active window.

Third, fixed the low level keyboard hook to forward toggle key
updates, which it was neglecting to do.

Finally, keyboard and mouse input is always forwarded from the hook
to the primary screen handler which then shadows the current key
and mouse button state.  If we're using low level hooks then this
isn't really necessary and GetKeyState() always returns the right
info but without low level hooks it means we can just use the
shadow state.  It also means we don't have to show our window in
order to get the system's key state table up to date, fixing the
screen flash when checking for the scroll lock state.
2003-05-03 12:54:22 +00:00
crs 42ea6306f6 Fixes to previous checkpoint. Non-ascii keys seem to work correctly.
Still not supporting key composition on X11.
2003-04-27 18:05:32 +00:00
crs 11f90022e0 Checkpointing improved key handling. This change adds non-ASCII
key handling to win32 on both client and server.  It also changes
the protocol and adds code to ensure every key pressed also gets
released and that that doesn't get confused when the KeyID for
the press is different from the KeyID of the release (or repeat).
2003-04-27 17:01:14 +00:00
crs cf7ab3459d Added KeySym <-> Unicode mappings. Changed code to use those
mappings to better support Unicode key events.
2003-04-24 20:11:38 +00:00
crs 54cc95123b Win32 project configuration fixes. 2003-04-16 20:59:25 +00:00
crs 56bafdb0e2 Minor win32 fixes. 2003-04-16 20:59:14 +00:00
crs aeb3f760d0 Fixed incorrect initialization of an XMotionEvent. 2003-04-14 22:16:21 +00:00
crs 6a108ed2d5 Added workaround for apparent Xinerama bug when warping the pointer.
This should allow synergy to be used on a system using Xinerama to
create a single logical screen from multiple physical screens.
2003-04-14 22:15:56 +00:00
crs a4a08c3ce6 Removed periodic call to XForceScreenSaver() to prevent the built-in
screen saver from activating.  It was unnecessary since the built-in
screen saver is disabled as appropriate;  this call was just to
ensure that the screen saver wouldn't start if an external program
reactivated the screen saver after synergy disabled it.

It's possible that this was causing screen flicker under gnome, though
i don't know why.  It's also possible that periodically sending events
to xscreensaver is causing the flicker but removing that code is more
difficult because xscreensaver can't be disabled, only deactivated or
killed.
2003-04-13 17:13:27 +00:00
crs 4521fe4990 Fixed several win32 bugs. First, synergy wasn't forwarding mouse
events to other hook functions, which broke some tools like objectbar.
Second, windows key processing was fixed.  Previously pressing and
release the key would only send a press event, locking the user onto
the client window;  also, the win32 server treated as a Meta modifier
instead of a Super modifier, which broke any use of it as any kind of
modifier key.  Third, added hacks to support several key combinations
on windows 95/98/me that are treated specially by windows, including
Alt+Tab, Alt+Shift+Tab, Alt+Esc, Alt+Shift+Esc, Ctrl+Esc, and any
combination using the windows key like Win+E and Win+F but not
Ctrl+Alt+Del.  Fourth, scroll lock only locking to the client (which
only happened when using a synergy server on windows) has been fixed;
unfortunately the solution causes a lot of screen redraws for some
reason.  Finally, there's been a fix to clipboard handling that may
or may not fix a problem where the clipboard would stop transferring
between systems after a little while.  I can't be sure if it fixes
the problem because I can't reproduce the problem.
2003-04-13 14:59:53 +00:00
crs c2bd4ebd4c Changed MS clipboard text converters to truncate the clipboard
data at the first NUL.  This fixes a bug when interoperating
with some win32 programs.
2003-04-08 19:26:35 +00:00
crs 125e81c92e This should fix multimon support on win32. 2003-03-25 21:31:39 +00:00
crs 9dabd425a5 Added check for the screen saver actually being active before
entering the loop waiting for it to deactivate.  The failure
to check was causing the screen saver code to kick in when
the screen saver timeout occurred, even if the screen saver
wasn't enabled (because Windows still sends the screen saver
activating message for no good reason when the screen saver
is disabled).
2003-03-21 19:16:37 +00:00
crs 995c9547cf Fixed getWindowProperty(). It wasn't catching all failure
cases correctly.
2003-03-21 19:13:15 +00:00
crs a7e2141ede Added a log message why the user is locked to the screen. 2003-03-17 22:32:01 +00:00
crs 0fd70ee536 Added type casts to avoid warning. 2003-03-17 22:31:59 +00:00
crs 9f984ad1a0 Fixed detection of screen saver shutdown on windows nt. 2003-03-16 17:40:57 +00:00
crs 74e50877e9 Made releaseKeys() only synthesize key releases for those keys
that synergy synthesized a press for, not keys that the user
is physically pressing.
2003-03-16 17:40:56 +00:00
crs de64342292 Minor hook fixes. 2003-03-16 17:40:47 +00:00
crs 635a2a7c5f Moved comment to more relevant location. 2003-03-13 20:24:45 +00:00
crs a7bafcca2f Fixed double locking of mutex. 2003-03-13 19:20:55 +00:00
crs 1d17f865ea Added switch delay and double-tap options to win32 and added a
tray icon to the client and server that gives status feedback to
the user and allows the user to kill the app.
2003-03-12 22:34:07 +00:00
crs 7bbd33d787 Added support on X11 for a global option to delay switching screens
when the mouse reaches a jump zone.
2003-02-22 21:53:25 +00:00
crs dd339fe375 Changed win32 client side cursor warping to be all relative motion
when not on the primary monitor.  This should eliminate the flicker
between virtual display 0,0 and the correct position.  While this
allows the user to confuse synergy by using the client's mouse,
synergy recovers quickly and easily from any confusion.
2003-02-16 19:55:54 +00:00
crs 2fc8780285 Added hack to heuristically detect bogus mouse motion caused by
a race condition where the synergy server updates the mouse
position but the synergy hook later receives a mouse update from
before the position change (i.e. out of order).
2003-02-16 19:53:56 +00:00
crs 9a7e452a3e Commented out an unnecessary hook and added a compile time
switch to disable grabbing of keyboard on win32 to facilitate
debugging.
2003-02-16 19:51:46 +00:00
crs 60fdb1f529 Changed heap to stack allocation in an oft-called function for
data that's never used outside the function.
2003-02-16 19:50:36 +00:00
crs 57ba0cb660 Fixed incorrect mouse button swapping on client screens. 2003-02-12 20:59:25 +00:00
crs 116005d64f To support keymaps with only upper (or lower) case keysyms we now
use Xlib to convert an unmatched keysym to upper and lower case and
use whichever, if any, is not the same as the original keysym.
This supports case conversion in any language that Xlib supports
it in.
2003-01-29 22:16:40 +00:00
crs dedb48d244 Applied patch from grmcdorman at users dot sourceforge dot net to
support keymaps that have only uppercase letters, which is the case
by default on the Sun X server (for US keyboards anyway).
2003-01-29 19:32:25 +00:00
crs e86e552ac8 Fixed stupid errors introduced by last attempt to fix broken
mouse behavior on multimonitor windows systems.  Those errors
broke synergy on all windows systems running as a server.
Also added an attempt to reduce the occasional jump that can
occur when switching screens when windows is the server.
2003-01-18 14:36:19 +00:00
crs 68a591210b Was forcing modifier keys that have no effect on the keysym
lookup to be up when synthesizing key events.  Now leaving
those modifiers in their current state.
2003-01-18 14:31:54 +00:00
crs f7e936faa9 Another try at fixing broken mouse behavior when a windows system
has multiple monitors with 0,0 of the virtual desktop not at the
upper-left.
2003-01-14 19:46:17 +00:00
crs 4bf0836eae Synergy no longer tries to suppress the screen saver once it starts.
It was doing that already if started through synergy but not if
started by something outside of synergy.  In particular, if you
use `xscreensaver-command --activate' synergy used to send fake
mouse motion events every 5 seconds to deactivate it.  That's
unlikely to be what the user wanted, especially if the locking is
enabled since it would force the password dialog to appear.

As before, it's recommended that client screens not use locking
because xscreensaver will not deactivate without getting a
password even if we make the request through a programmatic
interface.  Presumably that's for security reasons but it makes
life harder for synergy.
2003-01-11 15:16:41 +00:00
crs 1758ea6f9f Attempt to fix problems with multimon windows. The mouse position
reported by the synergy hook dll is in a space with 0,0 in the
upper-left which is not necessarily the same as the virtual desktop
space.  So the windows primary screen now accounts for that.  On
the secondary screen, mouse_event() doesn't seem to accept negative
coordinates even on the windows NT family, making monitors with
negative coordinates inaccessible via absolute moves.  So if the
move will be to negative coordinates, use the windows 95 family
fallback of absolute moving to 0,0 then relative moving to the
final position.
2003-01-11 14:01:44 +00:00
crs 0347bb1667 Changed log level of two messages. Now won't spew about reading
window properties and will report connection failure at DEBUG
instead of DEBUG1.
2003-01-08 21:36:13 +00:00
crs 9a245498a6 Attempts to improve forcing synergy window to foreground. These
changes don't seem to improve the situation but don't seem to
hurt either.
2003-01-07 21:12:51 +00:00
crs 1fd7ce14f3 Added low-level mouse hook to support mouse wheel on NT (>=SP3).
Thanks to karsten for the patch used as a starting point.
2003-01-07 21:11:54 +00:00
crs e9cc0b434e Moved CPrimaryScreen and CSecondaryScreen to the lib/synergy
and the platform specific implementations to lib/platform.
Added an lib/arch method to query the platform's native wide
character encoding and changed CUnicode to use it.  All
platform dependent code is now in lib/arch, lib/platform,
and the programs under cmd.  Also added more documentation.
2003-01-05 21:48:54 +00:00
crs f65921bc3f Refactored some platform dependent code into a new library,
lib/arch.  This should make porting easier.  Will probably
continue to refactor a little more, moving platform dependent
event handling stuff into lib/platform.
2003-01-04 22:01:32 +00:00
crs fd5625ba99 Improved handling of screen saver handling when windows 2k is
the client and the screen saver is password protected.  It used
to immediately turn off the screen saver (unintentionally) in
that case.
2002-12-25 18:44:54 +00:00
crs 9567a970a8 Changes to support building on solaris, irix, and darwin. Also
removed test for working fork (AC_FORK).
2002-12-25 10:35:59 +00:00
crs 773fcae8b3 Fixed client not reconnecting when server dies bug. 2002-12-15 19:58:41 +00:00
crs 52d8edb747 Fixed bug in detecting screen saver activation. Was using || instead
of && in conditional.
2002-11-05 19:23:05 +00:00
crs 17e8ba2dbd Merged fixes for building on MacOS X. It dies on one file with
an 	internal compiler error;  building that file without
optimization works around the compiler bug.  Sadly, synergy can
only interact with X windows, not native MacOS windows.
2002-11-03 18:09:28 +00:00
crs 9102fb80b9 Ported recent changes to win32 and fixed CRLF problems with project
files (most had CRCRCRLF).
2002-10-29 22:07:55 +00:00
crs 0ce15c1a9b Moved CUnicode to lib/io. That's a reasonable place for it
that's after lib/mt.  It needs to be after lib/mt in preparation
for supporting platforms without the reentrant wide char and
multi-byte functions.
2002-10-22 21:30:48 +00:00
crs 285cc3abc0 Fixed CXWindowsScreen to force the event loop to wake up when
exitMainLoop() is called.
2002-10-17 21:37:41 +00:00
crs 11e29ff7eb Added support for using select() instead of poll(). 2002-10-16 22:01:50 +00:00
crs d8dde48c2b Changed log() and logc() macros to LOG() and LOGC(), respectively.
This avoids a conflict with the standard math library log()
function.
2002-10-15 21:29:44 +00:00
crs a729e33cfb Fixed win32 config saving, keyboard mapping, and AltGr bugs.
Made extensive changes to the launcher to provide more control
over setting up auto-start and it now saves configuration to
the user's documents directory if auto-starting at login and
saves to the system directory if auto-starting at boot.
Replaced MapVirtualKey() with table lookup to work around that
function's lack of support for extended keyboard scan codes.
Added first cut at support for AltGr.
2002-09-02 17:30:04 +00:00
crs b0b494b8fa lowered severity of some debug messages. 2002-09-01 09:28:54 +00:00
crs a0c2cd10dd removed bogus #error. 2002-08-18 17:32:27 +00:00
crs 435bb738e6 added win32 launcher program. also changed VC++ dsp and dsw
files to binary form so \r\n aren't converted.  added icons
to client and server apps on win32.
2002-08-11 11:49:36 +00:00
crs f6c3a9453b added copyright to top of each file. 2002-08-02 19:57:46 +00:00
crs 3f13217929 minor automake fixes. 2002-08-01 11:45:21 +00:00
crs 5bb5542a13 fixes to get vpath builds working (necessary for `make distcheck'). 2002-07-31 17:34:05 +00:00
crs fae797e220 Moved version header to base and it now uses VERSION macro
from config.h if available (which means version is now a
string, not three integers).  Changed version to 1.0.0 and
protocol version to 1.0.  And added MAINTAINERCLEANFILES
to makefiles to remove generated files.
2002-07-31 16:57:26 +00:00
crs 8c1f5f623b added EXTRA_* files to get `make dist' doing the right thing. 2002-07-31 16:27:06 +00:00
crs cfe5b99f9d okay, now the files should no longer be executable. 2002-07-31 13:41:58 +00:00
crs c6d98af056 now building hook dll for release without linking in standard
C runtime.  need C runtime for debug build for asserts.
2002-07-31 12:40:41 +00:00
crs 5e40de48f9 fixed problem with opening client and server. in some cases it
would fail to open in such a way that it could never succeed
but it'd never stop retrying.  now terminating when open fails
such that it'll never succeed.
2002-07-31 12:39:34 +00:00
crs fee4095624 Reorganized source tree. Moved client.cpp into cmd/synergy as
synergy.cpp and server.cpp into cmd/synergyd as synergyd.cpp.
Moved and renamed related files.  Moved remaining source files
into lib/....  Modified and added makefiles as appropriate.
Result is that library files are under lib with each library
in its own directory and program files are under cmd with each
command in its own directory.
2002-07-30 16:52:46 +00:00