CServer
 * must have connection thread in screen info map
    allows disconnect if screen map changes and screen is removed
 * put mutex locks wherever necessary (like accessing m_active)

server						client
------						------
[accept]			<--		connect
challenge			-->		[encrypt]
[verify]			<--		response (encrypted challenge, client name)
hangup if invalid
query info			-->		
					<--		info (size)

---
win32:
  need to support window stations
    login screen on NT is a separate window station
  handle display changes

---
not handling international characters

---
don't allow leaving screen when any key is down
  that includes shift keys and mouse buttons
  caps lock, etc must not be down but can be on

not distinguishing between caps lock and shift lock
  In Caps Lock mode, the alphabetic keys send their uppercase (shifted) char-
  acter when pressed alone. For Caps Lock mode, pressing and releasing the
  lock key turns on the mode and pressing and releasing the lock key again
  turns off the mode. In Shift Lock mode, all keys on the main keypad send
  their shifted character when pressed alone. For Shift Lock mode, pressing
  and releasing the Lock key turns on the mode, and pressing and releasing
  either the Lock or the Shift key turns off the mode.

---
problems with CLIPBOARD and KDE and NEdit
  KDE mail reader (others?) and NEdit never reply to selection request
  perhaps a general Motif problem?

currently sending all clipboards to all clients
  some clients may not need all clipboards
  add filtering mechanism

must find app that correctly sets the CLIPBOARD selection for testing
  synergy must note changes to one or both selections
    seems to be having trouble with noting CLIPBOARD after PRIMARY changes

investigate klipper
  KDE's clipboard manager?
  it crashed once when server did (see below)

---
got crash when opening netscape window after trying copy in KDE mail
  BadWindow in ChangeWindowAttributes
  also got it when trying to transfer big clipboard from secondary
    or just after transferring and perhaps trying to set locally

---
sometimes not sending correct clipboard
  some kind of race condition i think
  can select text then switch and get empty clipboard
    switching back to owner screen then out gets correct clipboard

---
screen resize should report new mouse position
  client could change it to keep mouse on screen
  server will need to know new position
  may need to ignore mouse events sent after resize but before server
    knows about the change.
  not handling screen resizing yet

---
not handling screen saver at all yet

---
slow leaving primary screen on X
  possibly due to getting primary clipboards
  possibly something else
  could try asynchronously getting primary clipboard
    race condition on secondary wrt pasting

---
win32 hook DLL sometimes not unloaded when server is killed?
  will get assertion on restart as if DLL was still loaded.
  can tell because all DLL copies share data segment.
  should prevent multiple copies from loading (or initializing)
    replace asserts with (multithread locked) check of variables
    return 0 if busy
    server must handle failure
  try to figure out why it's not unloading

---
test:
  X primary
    ctrl+alt+keypad_add, ctrl+alt_keypad_minus -> eaten by primary X server
    ctrl+alt+backspace probably eaten by primary X server if so configured
    ctrl+alt+delete probably eaten locally
      probably underneath primary X server too
  Win32 desktop -> X laptop
    eaten global hot keys:
      ctrl+alt+delete -> task manager (or logon or reboot)
      alt+[shift+]tab -> cycle through tasks
      alt+[shift+]esc -> cycle windows
      ctrl+esc -> start menu
      windows+R -> run dialog
      windows+M -> minimize all
      windows+shift+M -> minimize all
      windows+F1 -> help
      windows+E -> explorer
      windows+F -> find files
      windows+ctrl+F -> find computer
      windows+tab -> cycle through taskbar buttons
      windows+break -> system properties
    not eaten:
      alt+space -> system menu
      shift+F10 -> context menu
      app key -> context menu
    misc:
      accessibility shortcuts: not eaten but dialogs appear anyway
  X laptop -> Win32 desktop
    check:
      shift+tab -> okay
      alt+[shift+]tab -> okay
      alt+[shift+]esc -> okay
      ctrl+esc -> start menu -> okay
      ctrl+esc, esc, shift+F10 -> toolbar context menu -> okay
      F10 -> activate menu in explorer -> okay
      shift+F10 -> context menu -> okay
      alt+space -> context menu -> okay
      alt+hyphen -> MDI window menu -> okay
      alt+letter -> open corresponding menu -> okay
      alt+F6 -> switch between windows in single program -> okay
      shift+insert CD-ROM -> bypass auto-run
    check accessibility shortcuts -> does not work
    check accessibility features
      sticky keys -> no
      filter keys -> no
      toggle keys -> no
      mouse keys -> no
      high contrast -> no
  X desktop -> win32
    shift, ctrl, alt not working
    check:
      shift+tab
      windows+R -> run dialog
      windows+M -> minimize all
      windows+shift+M -> minimize all
      windows+F1 -> help
      windows+E -> explorer
      windows+F -> find files
      windows+ctrl+F -> find computer
      windows+tab -> cycle through taskbar buttons
      windows+break -> system properties
      app key -> context menu
  Win32 -> Win32
    check accessibility shortcuts work on secondary
    check accessibility features work on secondary

---
server asserts if two clients with same name try to connect
  should simply refuse second client
also not reaping disconnects very fast
  investigate slowness

---
replace all structs with classes

---
Accessibility Shortcuts

   Key                                Result
   -------------------------------------------------------------------
   Tap SHIFT 5 times                  Toggles StickyKeys on and off.

   Press down and hold the right      Toggles FilterKeys on and off.
   SHIFT key for 8 seconds

   Press down and hold the NUM LOCK   Toggles ToggleKeys on and off.
   key for 5 seconds

   Left ALT+left SHIFT+NUM LOCK       Toggles MouseKeys on and off.

   Left ALT+left SHIFT+PRINT SCREEN   Toggles High Contrast on and off.
