summaryrefslogtreecommitdiffstats
path: root/extra/kde301/kkeyserver_x11.h
blob: f0b4dbea451b7bad9f079b4f5cf887dbfba99c48 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#ifndef _KKEYSERVER_X11_H
#define _KKEYSERVER_X11_H

#include "kshortcut.h"
#include "kkeynative.h"

namespace KKeyServer
{
	struct CodeMod	{ int code, mod; };

	struct Sym
	{
	 public:
		uint m_sym;

		Sym()
			{ m_sym = 0; }
		Sym( uint sym )
			{ m_sym = sym; }
		Sym( const TQString& s )
			{ init( s ); }

		bool initQt( int keyTQt );
		bool init( const TQString& );

		int qt() const;
		TQString toStringInternal() const;
		TQString toString() const;

		uint getModsRequired() const;
		uint getSymVariation() const;

		operator uint() const { return m_sym; }
		Sym& operator =( uint sym ) { m_sym = sym; return *this; }

	 private:
		TQString toString( bool bUserSpace ) const;

		static void capitalizeKeyname( TQString& );
	};

	struct Key
	{
		enum { CODE_FOR_QT = 256 };

		uint m_code;
		uint m_mod;
		uint m_sym;

		bool init( const KKey& key, bool bTQt );

		bool isNative() const { return m_code != CODE_FOR_QT; }

		uint code() const { return m_code; }
		uint mod() const { return m_mod; }
		uint sym() const { return m_sym; }
		int keyCodeQt() const { return (int) m_sym; }

		void setKeycodeQt( int keyTQt )
			{ m_code = CODE_FOR_QT; m_sym = keyTQt; }

		Key& operator =( const KKeyNative& key );
		int compare( const Key& ) const;

		bool operator ==( const Key& b ) const
			{ return compare( b ) == 0; }
		bool operator <( const Key& b ) const
			{ return compare( b ) < 0; }

		KKey key() const;
	};

	struct Variations
	{
		enum { MAX_VARIATIONS = 4 };

		Key m_rgkey[MAX_VARIATIONS];
		uint m_nVariations;

		Variations() { m_nVariations = 0; }

		void init( const KKey&, bool bTQt );
		
		uint count() const { return m_nVariations; }
		const Key& key( uint i ) const { return m_rgkey[i]; }
	};

	bool initializeMods();

	/**
	 * Returns the equivalent X modifier mask of the given modifier flag.
	 */
	uint modX( KKey::ModFlag );
	/**
	 * Returns true if the current keyboard layout supports the Win key.
	 * Specifically, whether the Super or Meta keys are assigned to an X modifier.
	 */
	bool keyboardHasWinKey();
	uint modXShift();
	uint modXLock();
	uint modXCtrl();
	uint modXAlt();
	uint modXNumLock();
	uint modXWin();
	uint modXScrollLock();
	/**
	 * Returns bitwise OR'ed mask containing Shift, Ctrl, Alt, and
	 * Win (if available).
	 */
	uint accelModMaskX();

	bool keyQtToSym( int keyTQt, uint& sym );
	bool keyQtToMod( int keyTQt, uint& mod );
	bool symToKeyQt( uint sym, int& keyTQt );

	bool modToModQt( uint mod, int& modTQt );
	bool modToModX( uint mod, uint& modX );
	bool modXToModQt( uint modX, int& modTQt );
	bool modXToMod( uint modX, uint& mod );

	bool codeXToSym( uchar codeX, uint modX, uint& symX );

	TQString modToStringInternal( uint mod );
	TQString modToStringUser( uint mod );

	bool stringToSymMod( const TQString&, uint& sym, uint& mod );

	void keyQtToKeyX( uint keyCombTQt, unsigned char *pKeyCodeX, uint *pKeySymX, uint *pKeyModX );
};

#endif // !_KKEYSERVER_X11_H