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