/[rdesktop]/sourceforge.net/trunk/rdesktop/xkeymap.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /sourceforge.net/trunk/rdesktop/xkeymap.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 73 by astrand, Mon Jul 29 19:21:51 2002 UTC revision 85 by astrand, Wed Jul 31 06:49:34 2002 UTC
# Line 53  add_to_keymap(char *keyname, uint8 scanc Line 53  add_to_keymap(char *keyname, uint8 scanc
53                  return;                  return;
54          }          }
55    
56          DEBUG_KBD("Adding translation, keysym=0x%x, scancode=0x%x, "          DEBUG_KBD(("Adding translation, keysym=0x%x, scancode=0x%x, "
57                    "modifiers=0x%x\n", (unsigned int) keysym, scancode,                     "modifiers=0x%x\n", (unsigned int) keysym, scancode, modifiers));
                   modifiers);  
58    
59          keymap[keysym & KEYMAP_MASK].scancode = scancode;          keymap[keysym & KEYMAP_MASK].scancode = scancode;
60          keymap[keysym & KEYMAP_MASK].modifiers = modifiers;          keymap[keysym & KEYMAP_MASK].modifiers = modifiers;
# Line 117  xkeymap_read(char *mapname) Line 116  xkeymap_read(char *mapname)
116                  if (strncmp(line, "map ", 4) == 0)                  if (strncmp(line, "map ", 4) == 0)
117                  {                  {
118                          keylayout = strtol(line + 4, NULL, 16);                          keylayout = strtol(line + 4, NULL, 16);
119                          DEBUG_KBD("Keylayout 0x%x\n", keylayout);                          DEBUG_KBD(("Keylayout 0x%x\n", keylayout));
120                          continue;                          continue;
121                  }                  }
122    
123                  /* compose */                  /* compose */
124                  if (strncmp(line, "enable_compose", 15) == 0)                  if (strncmp(line, "enable_compose", 15) == 0)
125                  {                  {
126                          DEBUG_KBD("Enabling compose handling\n");                          DEBUG_KBD(("Enabling compose handling\n"));
127                          enable_compose = True;                          enable_compose = True;
128                          continue;                          continue;
129                  }                  }
# Line 140  xkeymap_read(char *mapname) Line 139  xkeymap_read(char *mapname)
139                  p = strchr(line, ' ');                  p = strchr(line, ' ');
140                  if (p == NULL)                  if (p == NULL)
141                  {                  {
142                          error("Bad line %d in keymap %s\n", line_num,                          error("Bad line %d in keymap %s\n", line_num, mapname);
                               mapname);  
143                          continue;                          continue;
144                  }                  }
145                  else                  else
# Line 220  void Line 218  void
218  xkeymap_init2(void)  xkeymap_init2(void)
219  {  {
220          unsigned int max_keycode;          unsigned int max_keycode;
221          XDisplayKeycodes(display, &min_keycode, (int *)&max_keycode);          XDisplayKeycodes(display, &min_keycode, (int *) &max_keycode);
222  }  }
223    
224    
# Line 244  xkeymap_translate_key(KeySym keysym, uns Line 242  xkeymap_translate_key(KeySym keysym, uns
242          if (tr.scancode != 0)          if (tr.scancode != 0)
243          {          {
244                  DEBUG_KBD                  DEBUG_KBD
245                          ("Found key translation, scancode=0x%x, modifiers=0x%x\n",                          (("Found key translation, scancode=0x%x, modifiers=0x%x\n",
246                           tr.scancode, tr.modifiers);                            tr.scancode, tr.modifiers));
247                  return tr;                  return tr;
248          }          }
249    
250          printf("No translation for (keysym 0x%lx, %s)\n", keysym,          printf("No translation for (keysym 0x%lx, %s)\n", keysym, get_ksname(keysym));
                get_ksname(keysym));  
251    
252          /* not in keymap, try to interpret the raw scancode */          /* not in keymap, try to interpret the raw scancode */
253          if ((keycode >= min_keycode) && (keycode <= 0x60))          if ((keycode >= min_keycode) && (keycode <= 0x60))
# Line 344  ensure_remote_modifiers(uint32 ev_time, Line 341  ensure_remote_modifiers(uint32 ev_time,
341                  if (MASK_HAS_BITS(tr.modifiers, MapShiftMask))                  if (MASK_HAS_BITS(tr.modifiers, MapShiftMask))
342                  {                  {
343                          /* Needs this modifier. Send down. */                          /* Needs this modifier. Send down. */
344                          rdp_send_scancode(ev_time, RDP_KEYPRESS,                          rdp_send_scancode(ev_time, RDP_KEYPRESS, SCANCODE_CHAR_LSHIFT);
                                           SCANCODE_CHAR_LSHIFT);  
345                  }                  }
346                  else                  else
347                  {                  {
348                          /* Should not use this modifier. Send up. */                          /* Should not use this modifier. Send up. */
349                          rdp_send_scancode(ev_time, RDP_KEYRELEASE,                          rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_LSHIFT);
                                           SCANCODE_CHAR_LSHIFT);  
350                  }                  }
351          }          }
352    
# Line 363  ensure_remote_modifiers(uint32 ev_time, Line 358  ensure_remote_modifiers(uint32 ev_time,
358                  if (MASK_HAS_BITS(tr.modifiers, MapAltGrMask))                  if (MASK_HAS_BITS(tr.modifiers, MapAltGrMask))
359                  {                  {
360                          /* Needs this modifier. Send down. */                          /* Needs this modifier. Send down. */
361                          rdp_send_scancode(ev_time, RDP_KEYPRESS,                          rdp_send_scancode(ev_time, RDP_KEYPRESS, SCANCODE_CHAR_RALT);
                                           SCANCODE_CHAR_RALT);  
362                  }                  }
363                  else                  else
364                  {                  {
365                          /* Should not use this modifier. Send up. */                          /* Should not use this modifier. Send up. */
366                          rdp_send_scancode(ev_time, RDP_KEYRELEASE,                          rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_RALT);
                                           SCANCODE_CHAR_RALT);  
367                  }                  }
368          }          }
369    
# Line 379  ensure_remote_modifiers(uint32 ev_time, Line 372  ensure_remote_modifiers(uint32 ev_time,
372              != MASK_HAS_BITS(remote_modifier_state, MapNumLockMask))              != MASK_HAS_BITS(remote_modifier_state, MapNumLockMask))
373          {          {
374                  /* The remote modifier state is not correct */                  /* The remote modifier state is not correct */
375                  DEBUG_KBD("Remote NumLock state is incorrect. Toggling\n");                  DEBUG_KBD(("Remote NumLock state is incorrect. Toggling\n"));
376                  if (MASK_HAS_BITS(tr.modifiers, MapNumLockMask))                  if (MASK_HAS_BITS(tr.modifiers, MapNumLockMask))
377                  {                  {
378                          /* Needs this modifier. Toggle */                          /* Needs this modifier. Toggle */
379                          rdp_send_scancode(ev_time, RDP_KEYPRESS,                          rdp_send_scancode(ev_time, RDP_KEYPRESS, SCANCODE_CHAR_NUMLOCK);
380                                            SCANCODE_CHAR_NUMLOCK);                          rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_NUMLOCK);
                         rdp_send_scancode(ev_time, RDP_KEYRELEASE,  
                                           SCANCODE_CHAR_NUMLOCK);  
381                  }                  }
382                  else                  else
383                  {                  {
384                          /* Should not use this modifier. Toggle */                          /* Should not use this modifier. Toggle */
385                          rdp_send_scancode(ev_time, RDP_KEYPRESS,                          rdp_send_scancode(ev_time, RDP_KEYPRESS, SCANCODE_CHAR_NUMLOCK);
386                                            SCANCODE_CHAR_NUMLOCK);                          rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_NUMLOCK);
                         rdp_send_scancode(ev_time, RDP_KEYRELEASE,  
                                           SCANCODE_CHAR_NUMLOCK);  
387                  }                  }
388          }          }
389    
# Line 405  static void Line 394  static void
394  update_modifier_state(uint16 modifiers, BOOL pressed)  update_modifier_state(uint16 modifiers, BOOL pressed)
395  {  {
396    
397          DEBUG_KBD("Before updating modifier_state:0x%x, pressed=0x%x\n",          DEBUG_KBD(("Before updating modifier_state:0x%x, pressed=0x%x\n",
398                    remote_modifier_state, pressed);                     remote_modifier_state, pressed));
399          switch (modifiers)          switch (modifiers)
400          {          {
401                  case SCANCODE_CHAR_LSHIFT:                  case SCANCODE_CHAR_LSHIFT:
402                          MASK_CHANGE_BIT(remote_modifier_state,                          MASK_CHANGE_BIT(remote_modifier_state, MapLeftShiftMask, pressed);
                                         MapLeftShiftMask, pressed);  
403                          break;                          break;
404                  case SCANCODE_CHAR_RSHIFT:                  case SCANCODE_CHAR_RSHIFT:
405                          MASK_CHANGE_BIT(remote_modifier_state,                          MASK_CHANGE_BIT(remote_modifier_state, MapRightShiftMask, pressed);
                                         MapRightShiftMask, pressed);  
406                          break;                          break;
407                  case SCANCODE_CHAR_LCTRL:                  case SCANCODE_CHAR_LCTRL:
408                          MASK_CHANGE_BIT(remote_modifier_state,                          MASK_CHANGE_BIT(remote_modifier_state, MapLeftCtrlMask, pressed);
                                         MapLeftCtrlMask, pressed);  
409                          break;                          break;
410                  case SCANCODE_CHAR_RCTRL:                  case SCANCODE_CHAR_RCTRL:
411                          MASK_CHANGE_BIT(remote_modifier_state,                          MASK_CHANGE_BIT(remote_modifier_state, MapRightCtrlMask, pressed);
                                         MapRightCtrlMask, pressed);  
412                          break;                          break;
413                  case SCANCODE_CHAR_LALT:                  case SCANCODE_CHAR_LALT:
414                          MASK_CHANGE_BIT(remote_modifier_state, MapLeftAltMask,                          MASK_CHANGE_BIT(remote_modifier_state, MapLeftAltMask, pressed);
                                         pressed);  
415                          break;                          break;
416                  case SCANCODE_CHAR_RALT:                  case SCANCODE_CHAR_RALT:
417                          MASK_CHANGE_BIT(remote_modifier_state,                          MASK_CHANGE_BIT(remote_modifier_state, MapRightAltMask, pressed);
                                         MapRightAltMask, pressed);  
418                          break;                          break;
419                  case SCANCODE_CHAR_LWIN:                  case SCANCODE_CHAR_LWIN:
420                          MASK_CHANGE_BIT(remote_modifier_state, MapLeftWinMask,                          MASK_CHANGE_BIT(remote_modifier_state, MapLeftWinMask, pressed);
                                         pressed);  
421                          break;                          break;
422                  case SCANCODE_CHAR_RWIN:                  case SCANCODE_CHAR_RWIN:
423                          MASK_CHANGE_BIT(remote_modifier_state,                          MASK_CHANGE_BIT(remote_modifier_state, MapRightWinMask, pressed);
                                         MapRightWinMask, pressed);  
424                          break;                          break;
425                  case SCANCODE_CHAR_NUMLOCK:                  case SCANCODE_CHAR_NUMLOCK:
426                          /* KeyReleases for NumLocks are sent immediately. Toggle the                          /* KeyReleases for NumLocks are sent immediately. Toggle the
# Line 449  update_modifier_state(uint16 modifiers, Line 430  update_modifier_state(uint16 modifiers,
430                                  BOOL newNumLockState;                                  BOOL newNumLockState;
431                                  newNumLockState =                                  newNumLockState =
432                                          (MASK_HAS_BITS                                          (MASK_HAS_BITS
433                                           (remote_modifier_state,                                           (remote_modifier_state, MapNumLockMask) == False);
                                           MapNumLockMask) == False);  
434                                  MASK_CHANGE_BIT(remote_modifier_state,                                  MASK_CHANGE_BIT(remote_modifier_state,
435                                                  MapNumLockMask,                                                  MapNumLockMask, newNumLockState);
                                                 newNumLockState);  
436                          }                          }
437                          break;                          break;
438          }          }
439          DEBUG_KBD("After updating modifier_state:0x%x\n",          DEBUG_KBD(("After updating modifier_state:0x%x\n", remote_modifier_state));
                   remote_modifier_state);  
440    
441  }  }
442    
# Line 470  rdp_send_scancode(uint32 time, uint16 fl Line 448  rdp_send_scancode(uint32 time, uint16 fl
448    
449          if (scancode & SCANCODE_EXTENDED)          if (scancode & SCANCODE_EXTENDED)
450          {          {
451                  DEBUG_KBD("Sending extended scancode=0x%x, flags=0x%x\n",                  DEBUG_KBD(("Sending extended scancode=0x%x, flags=0x%x\n",
452                            scancode & ~SCANCODE_EXTENDED, flags);                             scancode & ~SCANCODE_EXTENDED, flags));
453                  rdp_send_input(time, RDP_INPUT_SCANCODE, flags | KBD_FLAG_EXT,                  rdp_send_input(time, RDP_INPUT_SCANCODE, flags | KBD_FLAG_EXT,
454                                 scancode & ~SCANCODE_EXTENDED, 0);                                 scancode & ~SCANCODE_EXTENDED, 0);
455          }          }
456          else          else
457          {          {
458                  DEBUG_KBD("Sending scancode=0x%x, flags=0x%x\n", scancode,                  DEBUG_KBD(("Sending scancode=0x%x, flags=0x%x\n", scancode, flags));
                           flags);  
459                  rdp_send_input(time, RDP_INPUT_SCANCODE, flags, scancode, 0);                  rdp_send_input(time, RDP_INPUT_SCANCODE, flags, scancode, 0);
460          }          }
461  }  }

Legend:
Removed from v.73  
changed lines
  Added in v.85

  ViewVC Help
Powered by ViewVC 1.1.26