deskflow/lib/synergy/IKeyState.h
crs23 b728885e25 Applied patch 1547642, key broadcasting. Modified the patch to conform
to style guidelines.  Also enhanced it to allow binding hot keys to not
only toggling broadcasting but also turning it on or off, resized the
hot key dialog to accommodate the keyboard broadcasting option, changed
the configuration string for the keyboard broadcasting option, and
added documentation.

This change does not include the VS8 fix included in the patch.
2007-09-10 00:59:51 +00:00

174 lines
4.5 KiB
C++

/*
* synergy -- mouse and keyboard sharing utility
* Copyright (C) 2003 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 IKEYSTATE_H
#define IKEYSTATE_H
#include "IInterface.h"
#include "KeyTypes.h"
#include "CEvent.h"
#include "CString.h"
#include "stdset.h"
//! Key state interface
/*!
This interface provides access to set and query the keyboard state and
to synthesize key events.
*/
class IKeyState : public IInterface {
public:
enum {
kNumButtons = 0x200
};
//! Key event data
class CKeyInfo {
public:
static CKeyInfo* alloc(KeyID, KeyModifierMask, KeyButton, SInt32 count);
static CKeyInfo* alloc(KeyID, KeyModifierMask, KeyButton, SInt32 count,
const std::set<CString>& destinations);
static CKeyInfo* alloc(const CKeyInfo&);
static bool isDefault(const char* screens);
static bool contains(const char* screens, const CString& name);
static bool equal(const CKeyInfo*, const CKeyInfo*);
static CString join(const std::set<CString>& destinations);
static void split(const char* screens, std::set<CString>&);
public:
KeyID m_key;
KeyModifierMask m_mask;
KeyButton m_button;
SInt32 m_count;
char* m_screens;
char m_screensBuffer[1];
};
typedef std::set<KeyButton> KeyButtonSet;
//! @name manipulators
//@{
//! Update the keyboard map
/*!
Causes the key state to get updated to reflect the current keyboard
mapping.
*/
virtual void updateKeyMap() = 0;
//! Update the key state
/*!
Causes the key state to get updated to reflect the physical keyboard
state.
*/
virtual void updateKeyState() = 0;
//! Set half-duplex mask
/*!
Sets which modifier toggle keys are half-duplex. A half-duplex
toggle key doesn't report a key release when toggled on and
doesn't report a key press when toggled off.
*/
virtual void setHalfDuplexMask(KeyModifierMask) = 0;
//! Fake a key press
/*!
Synthesizes a key press event and updates the key state.
*/
virtual void fakeKeyDown(KeyID id, KeyModifierMask mask,
KeyButton button) = 0;
//! Fake a key repeat
/*!
Synthesizes a key repeat event and updates the key state.
*/
virtual void fakeKeyRepeat(KeyID id, KeyModifierMask mask,
SInt32 count, KeyButton button) = 0;
//! Fake a key release
/*!
Synthesizes a key release event and updates the key state.
*/
virtual void fakeKeyUp(KeyButton button) = 0;
//! Fake key releases for all fake pressed keys
/*!
Synthesizes a key release event for every key that is synthetically
pressed and updates the key state.
*/
virtual void fakeAllKeysUp() = 0;
//! Fake ctrl+alt+del
/*!
Synthesize a press of ctrl+alt+del. Return true if processing is
complete and false if normal key processing should continue.
*/
virtual bool fakeCtrlAltDel() = 0;
//@}
//! @name accessors
//@{
//! Test if key is pressed
/*!
Returns true iff the given key is down. Half-duplex toggles
always return false.
*/
virtual bool isKeyDown(KeyButton) const = 0;
//! Get the active modifiers
/*!
Returns the modifiers that are currently active according to our
shadowed state.
*/
virtual KeyModifierMask
getActiveModifiers() const = 0;
//! Get the active modifiers from OS
/*!
Returns the modifiers that are currently active according to the
operating system.
*/
virtual KeyModifierMask
pollActiveModifiers() const = 0;
//! Get the active keyboard layout from OS
/*!
Returns the active keyboard layout according to the operating system.
*/
virtual SInt32 pollActiveGroup() const = 0;
//! Get the keys currently pressed from OS
/*!
Adds any keys that are currently pressed according to the operating
system to \p pressedKeys.
*/
virtual void pollPressedKeys(KeyButtonSet& pressedKeys) const = 0;
//! Get key down event type. Event data is CKeyInfo*, count == 1.
static CEvent::Type getKeyDownEvent();
//! Get key up event type. Event data is CKeyInfo*, count == 1.
static CEvent::Type getKeyUpEvent();
//! Get key repeat event type. Event data is CKeyInfo*.
static CEvent::Type getKeyRepeatEvent();
//@}
private:
static CEvent::Type s_keyDownEvent;
static CEvent::Type s_keyUpEvent;
static CEvent::Type s_keyRepeatEvent;
};
#endif