windowing/windowserver/inc/Graphics/wskeyrouter.h
author hgs
Fri, 24 Sep 2010 16:44:34 +0300
changeset 188 1b081cb0800b
permissions -rw-r--r--
201026_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
188
1b081cb0800b 201026_1
hgs
parents:
diff changeset
     1
// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
1b081cb0800b 201026_1
hgs
parents:
diff changeset
     2
// All rights reserved.
1b081cb0800b 201026_1
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
1b081cb0800b 201026_1
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
1b081cb0800b 201026_1
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
1b081cb0800b 201026_1
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
1b081cb0800b 201026_1
hgs
parents:
diff changeset
     7
//
1b081cb0800b 201026_1
hgs
parents:
diff changeset
     8
// Initial Contributors:
1b081cb0800b 201026_1
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    10
//
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    11
// Contributors:
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    12
//
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    13
// Description:
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    14
// Key Event Routing Plug-in API
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    15
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    16
/**
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    17
@file
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    18
@publishedPartner
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    19
@prototype
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    20
*/
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    21
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    22
#ifndef WSKEYROUTER_H
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    23
#define WSKEYROUTER_H
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    24
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    25
#include <e32base.h>
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    26
#include <w32std.h>
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    27
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    28
/**
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    29
Interface Uid
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    30
*/
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    31
const TUid KKeyRouterPluginUid = { 0x102872e1 };
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    32
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    33
/**
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    34
Key Capture Type
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    35
*/
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    36
enum TKeyCaptureType
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    37
	{
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    38
	ECaptureTypeKey = 0,
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    39
	ECaptureTypeLongKey = 1,
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    40
	ECaptureTypeKeyUpDown = 2
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    41
	};
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    42
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    43
/**
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    44
Key Capture Request
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    45
*/
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    46
struct TKeyCaptureRequest
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    47
	{
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    48
	/** Capture type */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    49
	TKeyCaptureType	iType;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    50
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    51
	/** Keycode or scancode to be captured */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    52
	TUint			iInputCode;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    53
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    54
	/** Output keycode or scancode. When iInputCode is captured, RouteKey()
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    55
		places iOutputCode in TKeyEventRouterOutput.iKeyEvent */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    56
	TUint			iOutputCode;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    57
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    58
	/** Bitmask of modifier keys of interest. Key events are captured only
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    59
		when the modifier keys specified by iModifierMask are in the states
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    60
		specified by iModifiers */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    61
	TUint			iModifierMask;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    62
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    63
	/** Bitmask of modifier key states */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    64
	TUint			iModifiers;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    65
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    66
	/** Opaque handle for this request */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    67
	TAny*			iHandle;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    68
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    69
	/** Opaque handle to window group through which request was made */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    70
	TAny*			iWindowGroup;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    71
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    72
	/** Identifier of the window group through which request was made */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    73
	TInt			iWindowGroupId;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    74
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    75
	/** UID of application that made the capture request */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    76
	TUid			iAppUid;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    77
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    78
	/** Capture priority for this request. If more than one window group has
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    79
		requested capture for the same key event, the one with the highest
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    80
		priority will capture it (unless overridden by application specific
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    81
		rules). */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    82
	TInt			iPriority;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    83
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    84
	/** Reserved for future use */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    85
	TInt			iReserved[2];
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    86
	};
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    87
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    88
/**
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    89
Input parameters for RouteKey()
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    90
*/
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    91
struct TKeyEventRouterInput
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    92
	{
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    93
	inline TKeyEventRouterInput(TKeyCaptureType aType, const TKeyEvent& aKeyEvent, TAny* aFocusWindowGroup, TUid aFocusAppUid);
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    94
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    95
	/** Capture type */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    96
	TKeyCaptureType		iType;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    97
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    98
	/** Input key event */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
    99
	TKeyEvent			iKeyEvent;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   100
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   101
	/** Opaque handle to current focussed window group */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   102
	TAny*				iFocusWindowGroup;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   103
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   104
	/** UID of client application with current focussed window group */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   105
	TUid				iFocusAppUid;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   106
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   107
	/** Reserved for future use */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   108
	TInt				iReserved[2];
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   109
	};
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   110
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   111
/**
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   112
Result codes for RouteKey()
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   113
*/
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   114
enum TKeyEventRouterResult
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   115
	{
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   116
	/** Key routed, no capture */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   117
	ERouted = 0,
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   118
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   119
	/** Key captured and routed */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   120
	ECaptured = 1,
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   121
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   122
	/** Key consumed, do not deliver event */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   123
	EConsumed = 2
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   124
	};
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   125
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   126
/**
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   127
Output parameters for RouteKey()
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   128
*/
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   129
struct TKeyEventRouterOutput
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   130
	{
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   131
	/** Result code */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   132
	TKeyEventRouterResult	iResult;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   133
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   134
	/** Output key event as translated by plug-in. Key code may be set by
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   135
		RWindowGroup::CaptureLongKey() via TKeyCaptureRequest.iOutputCode **/
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   136
	TKeyEvent				iKeyEvent;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   137
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   138
	/** Opaque handle to destination window group or NULL if captured by WServ
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   139
		(hotkey). Plug-in must set this to either the window group from the
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   140
		matching capture request or to TKeyEventRouterInput.iFocusWindowGroup */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   141
	TAny*					iWindowGroup;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   142
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   143
	/** Opaque handle from matching capture request or NULL if none */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   144
	TAny*					iCaptureHandle;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   145
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   146
	/** Reserved for future use */
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   147
	TInt					iReserved[2];
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   148
	};
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   149
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   150
/**
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   151
Key Event Router Interface
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   152
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   153
This class is implemented by a plug-in DLL in order to perform customised
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   154
routing of window server key events.
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   155
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   156
The Key Event Routing plug-in is a polymorphic DLL that implements the
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   157
CKeyEventRouter interface. Its UID1 and UID2 must be KDynamicLibraryUid and
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   158
KKeyRouterPluginUid respectively. UID3 identifies a particular implementation
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   159
of the plug-in. The first and only exported function should create and return
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   160
an object of the CKeyEventRouter sub-class.
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   161
*/
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   162
class CKeyEventRouter : public CBase
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   163
	{
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   164
public:
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   165
	/**
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   166
	Create and return an instance of CKeyEventRouter
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   167
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   168
	@return	Pointer to new router instance
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   169
	*/
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   170
	IMPORT_C static CKeyEventRouter* NewL();
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   171
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   172
	/**
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   173
	Add a new key capture request
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   174
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   175
	@param	aRequest	Capture request details
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   176
	*/
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   177
	virtual void AddCaptureKeyL(const TKeyCaptureRequest& aRequest) = 0;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   178
	   
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   179
	/**
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   180
	Update an existing key capture request
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   181
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   182
	@param	aRequest	Updated capture request details
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   183
	*/
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   184
	virtual void UpdateCaptureKeyL(const TKeyCaptureRequest& aRequest) = 0;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   185
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   186
	/**
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   187
	Cancel a key capture request
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   188
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   189
	@param	aType		Capture type
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   190
	@param	aHandle		Opaque handle of request to be cancelled
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   191
	*/
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   192
	virtual void CancelCaptureKey(TKeyCaptureType aType, TAny* aHandle) = 0;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   193
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   194
	/**
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   195
	Route the key event described by aInput and return its destination
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   196
	in iOutput.
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   197
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   198
	@param	aInput		Input data with key event to be routed
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   199
	@param	aOutput		Output key event and routing results
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   200
	*/
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   201
	virtual void RouteKey(const TKeyEventRouterInput& aInput,
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   202
						  TKeyEventRouterOutput& aOutput) = 0;
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   203
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   204
	/**
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   205
	Reserved for future use
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   206
	*/
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   207
private:
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   208
	virtual void Reserved1() {};
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   209
	virtual void Reserved2() {};
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   210
	};
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   211
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   212
inline TKeyEventRouterInput::TKeyEventRouterInput(TKeyCaptureType aType, const TKeyEvent& aKeyEvent, TAny* aFocusWindowGroup, TUid aFocusAppUid) : iType(aType), iKeyEvent(aKeyEvent), iFocusWindowGroup(aFocusWindowGroup), iFocusAppUid(aFocusAppUid)
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   213
	{
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   214
	}
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   215
1b081cb0800b 201026_1
hgs
parents:
diff changeset
   216
#endif // WSKEYROUTER_H