/[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 976 by astrand, Thu Aug 4 13:39:57 2005 UTC revision 1219 by astrand, Fri Apr 7 22:20:43 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 311  xkeymap_read(char *mapname) Line 311  xkeymap_read(char *mapname)
311                  }                  }
312    
313                  /* Include */                  /* Include */
314                  if (strncmp(line, "include ", sizeof("include ") - 1) == 0)                  if (str_startswith(line, "include "))
315                  {                  {
316                          if (!xkeymap_read(line + sizeof("include ") - 1))                          if (!xkeymap_read(line + sizeof("include ") - 1))
317                                  return False;                                  return False;
# Line 319  xkeymap_read(char *mapname) Line 319  xkeymap_read(char *mapname)
319                  }                  }
320    
321                  /* map */                  /* map */
322                  if (strncmp(line, "map ", sizeof("map ") - 1) == 0)                  if (str_startswith(line, "map "))
323                  {                  {
324                          g_keylayout = strtol(line + sizeof("map ") - 1, NULL, 16);                          g_keylayout = strtoul(line + sizeof("map ") - 1, NULL, 16);
325                          DEBUG_KBD(("Keylayout 0x%x\n", g_keylayout));                          DEBUG_KBD(("Keylayout 0x%x\n", g_keylayout));
326                          continue;                          continue;
327                  }                  }
328    
329                  /* compose */                  /* compose */
330                  if (strncmp(line, "enable_compose", sizeof("enable_compose") - 1) == 0)                  if (str_startswith(line, "enable_compose"))
331                  {                  {
332                          DEBUG_KBD(("Enabling compose handling\n"));                          DEBUG_KBD(("Enabling compose handling\n"));
333                          g_enable_compose = True;                          g_enable_compose = True;
# Line 335  xkeymap_read(char *mapname) Line 335  xkeymap_read(char *mapname)
335                  }                  }
336    
337                  /* sequence */                  /* sequence */
338                  if (strncmp(line, "sequence", sizeof("sequence") - 1) == 0)                  if (str_startswith(line, "sequence"))
339                  {                  {
340                          add_sequence(line + sizeof("sequence") - 1, mapname);                          add_sequence(line + sizeof("sequence") - 1, mapname);
341                          continue;                          continue;
342                  }                  }
343    
344                  /* keyboard_type */                  /* keyboard_type */
345                  if (strncmp(line, "keyboard_type ", sizeof("keyboard_type ") - 1) == 0)                  if (str_startswith(line, "keyboard_type "))
346                  {                  {
347                          g_keyboard_type = strtol(line + sizeof("keyboard_type ") - 1, NULL, 16);                          g_keyboard_type = strtol(line + sizeof("keyboard_type ") - 1, NULL, 16);
348                          DEBUG_KBD(("keyboard_type 0x%x\n", g_keyboard_type));                          DEBUG_KBD(("keyboard_type 0x%x\n", g_keyboard_type));
# Line 350  xkeymap_read(char *mapname) Line 350  xkeymap_read(char *mapname)
350                  }                  }
351    
352                  /* keyboard_subtype */                  /* keyboard_subtype */
353                  if (strncmp(line, "keyboard_subtype ", sizeof("keyboard_subtype ") - 1) == 0)                  if (str_startswith(line, "keyboard_subtype "))
354                  {                  {
355                          g_keyboard_subtype =                          g_keyboard_subtype =
356                                  strtol(line + sizeof("keyboard_subtype ") - 1, NULL, 16);                                  strtol(line + sizeof("keyboard_subtype ") - 1, NULL, 16);
# Line 359  xkeymap_read(char *mapname) Line 359  xkeymap_read(char *mapname)
359                  }                  }
360    
361                  /* keyboard_functionkeys */                  /* keyboard_functionkeys */
362                  if (strncmp(line, "keyboard_functionkeys ", sizeof("keyboard_functionkeys ") - 1) ==                  if (str_startswith(line, "keyboard_functionkeys "))
                     0)  
363                  {                  {
364                          g_keyboard_functionkeys =                          g_keyboard_functionkeys =
365                                  strtol(line + sizeof("keyboard_functionkeys ") - 1, NULL, 16);                                  strtol(line + sizeof("keyboard_functionkeys ") - 1, NULL, 16);
# Line 590  handle_special_keys(uint32 keysym, unsig Line 589  handle_special_keys(uint32 keysym, unsig
589                          /* Inhibit */                          /* Inhibit */
590                          return True;                          return True;
591                          break;                          break;
592                    case XK_Overlay1_Enable:
593                            /* Toggle SeamlessRDP */
594                            if (pressed)
595                                    ui_seamless_toggle();
596                            break;
597    
598          }          }
599          return False;          return False;
# Line 608  xkeymap_translate_key(uint32 keysym, uns Line 612  xkeymap_translate_key(uint32 keysym, uns
612                  tr = *ptr;                  tr = *ptr;
613                  if (tr.seq_keysym == 0) /* Normal scancode translation */                  if (tr.seq_keysym == 0) /* Normal scancode translation */
614                  {                  {
615                          if (tr.modifiers & MapInhibitMask)                          if (MASK_HAS_BITS(tr.modifiers, MapInhibitMask))
616                          {                          {
617                                  DEBUG_KBD(("Inhibiting key\n"));                                  DEBUG_KBD(("Inhibiting key\n"));
618                                  tr.scancode = 0;                                  tr.scancode = 0;
619                                  return tr;                                  return tr;
620                          }                          }
621    
622                          if (tr.modifiers & MapLocalStateMask)                          if (MASK_HAS_BITS(tr.modifiers, MapLocalStateMask))
623                          {                          {
624                                  /* The modifiers to send for this key should be obtained                                  /* The modifiers to send for this key should be obtained
625                                     from the local state. Currently, only shift is implemented. */                                     from the local state. Currently, only shift is implemented. */
626                                  if (state & ShiftMask)                                  if (MASK_HAS_BITS(state, ShiftMask))
627                                  {                                  {
628                                          tr.modifiers = MapLeftShiftMask;                                          tr.modifiers = MapLeftShiftMask;
629                                  }                                  }
630                          }                          }
631    
632                          if ((tr.modifiers & MapLeftShiftMask)                          /* Windows interprets CapsLock+Ctrl+key
633                              && ((remote_modifier_state & MapLeftCtrlMask)                             differently from Shift+Ctrl+key. Since we
634                                  || (remote_modifier_state & MapRightCtrlMask))                             are simulating CapsLock with Shifts, things
635                              && get_key_state(state, XK_Caps_Lock))                             like Ctrl+f with CapsLock on breaks. To
636                               solve this, we are releasing Shift if Ctrl
637                               is on, but only if Shift isn't physically pressed. */
638                            if (MASK_HAS_BITS(tr.modifiers, MapShiftMask)
639                                && MASK_HAS_BITS(remote_modifier_state, MapCtrlMask)
640                                && !MASK_HAS_BITS(state, ShiftMask))
641                          {                          {
642                                  DEBUG_KBD(("CapsLock + Ctrl pressed, releasing LeftShift\n"));                                  DEBUG_KBD(("Non-physical Shift + Ctrl pressed, releasing Shift\n"));
643                                  tr.modifiers ^= MapLeftShiftMask;                                  MASK_REMOVE_BITS(tr.modifiers, MapShiftMask);
644                          }                          }
645    
646                          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 652  xkeymap_translate_key(uint32 keysym, uns Line 661  xkeymap_translate_key(uint32 keysym, uns
661                          /* The modifiers to send for this key should be                          /* The modifiers to send for this key should be
662                             obtained from the local state. Currently, only                             obtained from the local state. Currently, only
663                             shift is implemented. */                             shift is implemented. */
664                          if (state & ShiftMask)                          if (MASK_HAS_BITS(state, ShiftMask))
665                          {                          {
666                                  tr.modifiers = MapLeftShiftMask;                                  tr.modifiers = MapLeftShiftMask;
667                          }                          }

Legend:
Removed from v.976  
changed lines
  Added in v.1219

  ViewVC Help
Powered by ViewVC 1.1.26