/[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 1010 by astrand, Wed Aug 31 13:00:57 2005 UTC revision 1294 by astrand, Wed Oct 11 17:59:18 2006 UTC
# Line 41  Line 41 
41  extern Display *g_display;  extern Display *g_display;
42  extern Window g_wnd;  extern Window g_wnd;
43  extern char g_keymapname[16];  extern char g_keymapname[16];
44  extern int g_keylayout;  extern unsigned int g_keylayout;
45  extern int g_keyboard_type;  extern int g_keyboard_type;
46  extern int g_keyboard_subtype;  extern int g_keyboard_subtype;
47  extern int g_keyboard_functionkeys;  extern int g_keyboard_functionkeys;
# Line 206  xkeymap_from_locale(const char *locale) Line 206  xkeymap_from_locale(const char *locale)
206          {          {
207                  fclose(fp);                  fclose(fp);
208                  STRNCPY(g_keymapname, str, sizeof(g_keymapname));                  STRNCPY(g_keymapname, str, sizeof(g_keymapname));
209                    xfree(str);
210                  return True;                  return True;
211          }          }
212    
213            xfree(str);
214          return False;          return False;
215  }  }
216    
# Line 321  xkeymap_read(char *mapname) Line 323  xkeymap_read(char *mapname)
323                  /* map */                  /* map */
324                  if (str_startswith(line, "map "))                  if (str_startswith(line, "map "))
325                  {                  {
326                          g_keylayout = strtol(line + sizeof("map ") - 1, NULL, 16);                          g_keylayout = strtoul(line + sizeof("map ") - 1, NULL, 16);
327                          DEBUG_KBD(("Keylayout 0x%x\n", g_keylayout));                          DEBUG_KBD(("Keylayout 0x%x\n", g_keylayout));
328                          continue;                          continue;
329                  }                  }
# Line 589  handle_special_keys(uint32 keysym, unsig Line 591  handle_special_keys(uint32 keysym, unsig
591                          /* Inhibit */                          /* Inhibit */
592                          return True;                          return True;
593                          break;                          break;
594                    case XK_Overlay1_Enable:
595                            /* Toggle SeamlessRDP */
596                            if (pressed)
597                                    ui_seamless_toggle();
598                            break;
599    
600          }          }
601          return False;          return False;
# Line 607  xkeymap_translate_key(uint32 keysym, uns Line 614  xkeymap_translate_key(uint32 keysym, uns
614                  tr = *ptr;                  tr = *ptr;
615                  if (tr.seq_keysym == 0) /* Normal scancode translation */                  if (tr.seq_keysym == 0) /* Normal scancode translation */
616                  {                  {
617                          if (tr.modifiers & MapInhibitMask)                          if (MASK_HAS_BITS(tr.modifiers, MapInhibitMask))
618                          {                          {
619                                  DEBUG_KBD(("Inhibiting key\n"));                                  DEBUG_KBD(("Inhibiting key\n"));
620                                  tr.scancode = 0;                                  tr.scancode = 0;
621                                  return tr;                                  return tr;
622                          }                          }
623    
624                          if (tr.modifiers & MapLocalStateMask)                          if (MASK_HAS_BITS(tr.modifiers, MapLocalStateMask))
625                          {                          {
626                                  /* The modifiers to send for this key should be obtained                                  /* The modifiers to send for this key should be obtained
627                                     from the local state. Currently, only shift is implemented. */                                     from the local state. Currently, only shift is implemented. */
628                                  if (state & ShiftMask)                                  if (MASK_HAS_BITS(state, ShiftMask))
629                                  {                                  {
630                                          tr.modifiers = MapLeftShiftMask;                                          tr.modifiers = MapLeftShiftMask;
631                                  }                                  }
632                          }                          }
633    
634                          if ((tr.modifiers & MapLeftShiftMask)                          /* Windows interprets CapsLock+Ctrl+key
635                              && ((remote_modifier_state & MapLeftCtrlMask)                             differently from Shift+Ctrl+key. Since we
636                                  || (remote_modifier_state & MapRightCtrlMask))                             are simulating CapsLock with Shifts, things
637                              && get_key_state(state, XK_Caps_Lock))                             like Ctrl+f with CapsLock on breaks. To
638                               solve this, we are releasing Shift if Ctrl
639                               is on, but only if Shift isn't physically pressed. */
640                            if (MASK_HAS_BITS(tr.modifiers, MapShiftMask)
641                                && MASK_HAS_BITS(remote_modifier_state, MapCtrlMask)
642                                && !MASK_HAS_BITS(state, ShiftMask))
643                          {                          {
644                                  DEBUG_KBD(("CapsLock + Ctrl pressed, releasing LeftShift\n"));                                  DEBUG_KBD(("Non-physical Shift + Ctrl pressed, releasing Shift\n"));
645                                  tr.modifiers ^= MapLeftShiftMask;                                  MASK_REMOVE_BITS(tr.modifiers, MapShiftMask);
646                          }                          }
647    
648                          DEBUG_KBD(("Found scancode translation, scancode=0x%x, modifiers=0x%x\n",                          DEBUG_KBD(("Found scancode translation, scancode=0x%x, modifiers=0x%x\n",
# Line 651  xkeymap_translate_key(uint32 keysym, uns Line 663  xkeymap_translate_key(uint32 keysym, uns
663                          /* The modifiers to send for this key should be                          /* The modifiers to send for this key should be
664                             obtained from the local state. Currently, only                             obtained from the local state. Currently, only
665                             shift is implemented. */                             shift is implemented. */
666                          if (state & ShiftMask)                          if (MASK_HAS_BITS(state, ShiftMask))
667                          {                          {
668                                  tr.modifiers = MapLeftShiftMask;                                  tr.modifiers = MapLeftShiftMask;
669                          }                          }

Legend:
Removed from v.1010  
changed lines
  Added in v.1294

  ViewVC Help
Powered by ViewVC 1.1.26