Advertisement
Guest User

Untitled

a guest
Oct 7th, 2011
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.95 KB | None | 0 0
  1. diff --git a/xorg-server-1.9.0/include/xkbsrv.h b/xorg-server-1.9.0.mkr/include/xkbsrv.h
  2. index 9f1507e..67d93e0 100644
  3. --- a/xorg-server-1.9.0/include/xkbsrv.h
  4. +++ b/xorg-server-1.9.0.mkr/include/xkbsrv.h
  5. @@ -171,7 +171,8 @@ typedef struct _XkbSrvInfo {
  6. KeyCode mouseKey;
  7. KeyCode inactiveKey;
  8. KeyCode slowKey;
  9. - KeyCode repeatKey;
  10. +#define XkbMkrMax 6
  11. + KeyCode repeatKey[XkbMkrMax];
  12. CARD8 krgTimerActive;
  13. CARD8 beepType;
  14. CARD8 beepCount;
  15. @@ -183,7 +184,7 @@ typedef struct _XkbSrvInfo {
  16. OsTimerPtr mouseKeyTimer;
  17. OsTimerPtr slowKeysTimer;
  18. OsTimerPtr bounceKeysTimer;
  19. - OsTimerPtr repeatKeyTimer;
  20. + OsTimerPtr repeatKeyTimer[XkbMkrMax];
  21. OsTimerPtr krgTimer;
  22.  
  23. int szFilters;
  24. diff --git a/xorg-server-1.9.0/xkb/xkbAccessX.c b/xorg-server-1.9.0.mkr/xkb/xkbAccessX.c
  25. index 10c38ca..1816e37 100644
  26. --- a/xorg-server-1.9.0/xkb/xkbAccessX.c
  27. +++ b/xorg-server-1.9.0.mkr/xkb/xkbAccessX.c
  28. @@ -70,19 +70,24 @@ AccessXInit(DeviceIntPtr keybd)
  29. {
  30. XkbSrvInfoPtr xkbi = keybd->key->xkbInfo;
  31. XkbControlsPtr ctrls = xkbi->desc->ctrls;
  32. +unsigned i;
  33.  
  34. xkbi->shiftKeyCount= 0;
  35. xkbi->mouseKeysCounter= 0;
  36. xkbi->inactiveKey= 0;
  37. xkbi->slowKey= 0;
  38. - xkbi->repeatKey= 0;
  39. xkbi->krgTimerActive= _OFF_TIMER;
  40. xkbi->beepType= _BEEP_NONE;
  41. xkbi->beepCount= 0;
  42. xkbi->mouseKeyTimer= NULL;
  43. xkbi->slowKeysTimer= NULL;
  44. xkbi->bounceKeysTimer= NULL;
  45. - xkbi->repeatKeyTimer= NULL;
  46. +
  47. + for(i=0;i<XkbMkrMax;i++){
  48. + xkbi->repeatKey[i]= 0;
  49. + xkbi->repeatKeyTimer[i]= NULL;
  50. + }
  51. +
  52. xkbi->krgTimer= NULL;
  53. xkbi->beepTimer= NULL;
  54. ctrls->repeat_delay = XkbDfltRepeatDelay;
  55. @@ -302,16 +307,21 @@ xkbControlsNotify cn;
  56. return 0;
  57. }
  58.  
  59. +
  60. static CARD32
  61. AccessXRepeatKeyExpire(OsTimerPtr timer,CARD32 now,pointer arg)
  62. {
  63. DeviceIntPtr dev = (DeviceIntPtr) arg;
  64. XkbSrvInfoPtr xkbi = dev->key->xkbInfo;
  65. +unsigned i;
  66.  
  67. - if (xkbi->repeatKey == 0)
  68. - return 0;
  69. -
  70. - AccessXKeyboardEvent(dev, ET_KeyPress, xkbi->repeatKey, TRUE);
  71. + for(i=0;i<XkbMkrMax;i++)
  72. + if(xkbi->repeatKeyTimer[i] == timer){
  73. + if (xkbi->repeatKey[i] == 0)
  74. + return 0;
  75. + AccessXKeyboardEvent(dev, ET_KeyPress, xkbi->repeatKey[i], TRUE);
  76. + break;
  77. + }
  78.  
  79. return xkbi->desc->ctrls->repeat_interval;
  80. }
  81. @@ -319,8 +329,10 @@ XkbSrvInfoPtr xkbi = dev->key->xkbInfo;
  82. void
  83. AccessXCancelRepeatKey(XkbSrvInfoPtr xkbi,KeyCode key)
  84. {
  85. - if (xkbi->repeatKey==key)
  86. - xkbi->repeatKey= 0;
  87. +unsigned i;
  88. + for(i=0;i<XkbMkrMax;i++)
  89. + if (xkbi->repeatKey[i]==key)
  90. + xkbi->repeatKey[i]= 0;
  91. return;
  92. }
  93.  
  94. @@ -331,6 +343,7 @@ DeviceIntPtr keybd;
  95. XkbSrvInfoPtr xkbi;
  96. XkbDescPtr xkb;
  97. XkbControlsPtr ctrls;
  98. +unsigned i;
  99.  
  100. keybd= (DeviceIntPtr)arg;
  101. xkbi= keybd->key->xkbInfo;
  102. @@ -359,10 +372,14 @@ XkbControlsPtr ctrls;
  103. ((xkbi->slowKey != xkbi->mouseKey) || (!xkbi->mouseKeysAccel)) &&
  104. (ctrls->enabled_ctrls&XkbRepeatKeysMask)) {
  105. if (BitIsOn(keybd->kbdfeed->ctrl.autoRepeats,xkbi->slowKey)) {
  106. - xkbi->repeatKey = xkbi->slowKey;
  107. - xkbi->repeatKeyTimer= TimerSet(xkbi->repeatKeyTimer,
  108. - 0, ctrls->repeat_delay,
  109. - AccessXRepeatKeyExpire, (pointer)keybd);
  110. + for(i=0;i<(XkbMkrMax-1);i++)
  111. + if(xkbi->repeatKey[i] == 0)
  112. + break;
  113. + xkbi->repeatKey[i] = xkbi->slowKey;
  114. + xkbi->repeatKeyTimer[i]= TimerSet(xkbi->repeatKeyTimer[i],0, ctrls->repeat_delay,AccessXRepeatKeyExpire, (pointer)keybd);
  115. + }
  116. +
  117. +
  118. }
  119. }
  120. }
  121. @@ -450,6 +467,7 @@ XkbControlsPtr ctrls = xkbi->desc->ctrls;
  122. Bool ignoreKeyEvent = FALSE;
  123. KeyCode key = event->detail.key;
  124. KeySym * sym = XkbKeySymsPtr(xkbi->desc,key);
  125. +unsigned i;
  126.  
  127. if (ctrls->enabled_ctrls&XkbAccessXKeysMask) {
  128. /* check for magic sequences */
  129. @@ -526,14 +544,22 @@ KeySym * sym = XkbKeySymsPtr(xkbi->desc,key);
  130. if (BitIsOn(keybd->kbdfeed->ctrl.autoRepeats,key)) {
  131. if (xkbDebugFlags&0x10)
  132. DebugF("Starting software autorepeat...\n");
  133. - if (xkbi->repeatKey == key)
  134. - ignoreKeyEvent = TRUE;
  135. - else {
  136. - xkbi->repeatKey = key;
  137. - xkbi->repeatKeyTimer= TimerSet(xkbi->repeatKeyTimer,
  138. - 0, ctrls->repeat_delay,
  139. - AccessXRepeatKeyExpire, (pointer)keybd);
  140. - }
  141. +
  142. + for(i=0;i<XkbMkrMax;i++)
  143. + if (xkbi->repeatKey[i] == key){
  144. + ignoreKeyEvent = TRUE;
  145. + break;
  146. + }
  147. + if(i==XkbMkrMax)
  148. + for(i=0;i<XkbMkrMax;i++){
  149. + if(xkbi->repeatKey[i] == 0){
  150. + xkbi->repeatKey[i] = key;
  151. + xkbi->repeatKeyTimer[i]= TimerSet(xkbi->repeatKeyTimer[i],0, ctrls->repeat_delay,AccessXRepeatKeyExpire, (pointer)keybd);
  152. + break;
  153. + }
  154. + }
  155. +
  156. +
  157. }
  158. }
  159. }
  160. @@ -582,7 +608,7 @@ XkbSrvInfoPtr xkbi = keybd->key->xkbInfo;
  161. XkbControlsPtr ctrls = xkbi->desc->ctrls;
  162. KeyCode key = event->detail.key;
  163. Bool ignoreKeyEvent = FALSE;
  164. -
  165. +int i;
  166. /* Don't transmit the KeyRelease if BounceKeys is on and
  167. * this is the release of a key that was ignored due to
  168. * BounceKeys.
  169. @@ -626,8 +652,10 @@ Bool ignoreKeyEvent = FALSE;
  170. /* Stop Repeating if the user releases the key that is currently
  171. * repeating.
  172. */
  173. - if (xkbi->repeatKey==key) {
  174. - xkbi->repeatKey= 0;
  175. + for(i=0;i<XkbMkrMax;i++)
  176. + if (xkbi->repeatKey[i]==key){
  177. + xkbi->repeatKey[i]= 0;
  178. + break;
  179. }
  180.  
  181. if ((ctrls->enabled_ctrls&XkbAccessXTimeoutMask)&&(ctrls->ax_timeout>0)) {
  182. diff --git a/xorg-server-1.9.0/xkb/xkbInit.c b/xorg-server-1.9.0.mkr/xkb/xkbInit.c
  183. index fbf8f14..168b2ce 100644
  184. --- a/xorg-server-1.9.0/xkb/xkbInit.c
  185. +++ b/xorg-server-1.9.0.mkr/xkb/xkbInit.c
  186. @@ -635,6 +635,7 @@ unwind_key:
  187. void
  188. XkbFreeInfo(XkbSrvInfoPtr xkbi)
  189. {
  190. +int i;
  191. free(xkbi->radioGroups);
  192. xkbi->radioGroups = NULL;
  193. if (xkbi->mouseKeyTimer) {
  194. @@ -649,10 +650,11 @@ XkbFreeInfo(XkbSrvInfoPtr xkbi)
  195. TimerFree(xkbi->bounceKeysTimer);
  196. xkbi->bounceKeysTimer= NULL;
  197. }
  198. - if (xkbi->repeatKeyTimer) {
  199. - TimerFree(xkbi->repeatKeyTimer);
  200. - xkbi->repeatKeyTimer= NULL;
  201. - }
  202. + for(i=0;i<XkbMkrMax;i++)
  203. + if (xkbi->repeatKeyTimer[i]) {
  204. + TimerFree(xkbi->repeatKeyTimer[i]);
  205. + xkbi->repeatKeyTimer[i]= NULL;
  206. + }
  207. if (xkbi->krgTimer) {
  208. TimerFree(xkbi->krgTimer);
  209. xkbi->krgTimer= NULL;
  210.  
  211.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement